2013-02-27 160 views
1

我允许用户将一些数据输入到TextField中。用户在TextField中输入Š1234D允许iOS中的特殊字符

我的代码看起来是这样的:

NSString *string = textField.text; 
for (int nCtr = 0; nCtr < [string length]; nCtr++) { 
       const char chars = [string characterAtIndex:nCtr]; 
       int isAlpha = isalpha(chars); 
} 

串输出看起来像这样:Š1234D 然后我印刷在第一字符值,它看起来像这样:“`”而不是“S”。这是为什么?我想在我的代码中允许特殊字符。

任何建议都会受到欢迎。需要一些指导。谢谢

回答

3

您正在截断字符值为[NSString chatacterAtIndex:]返回unichar(16位)而不是char(8位)。尝试:

unichar chars = [string characterAtIndex:nCtr]; 

UPDATE:另外请注意,你不应该使用isalpha()测试信件,因为这仅限于拉丁字符集,你需要的东西,可以使用非拉丁字符应对。使用这个代码,而不是:

NSCharacterSet *letterSet = [NSCharacterSet letterCharacterSet]; 
NSString *string = textField.text; 
for (NSUIntger nCtr = 0; nCtr < [string length]; nCtr++) 
{ 
    const unichar c = [string characterAtIndex:nCtr]; 
    BOOL isAlpha = [letterSet characterIsMember:c]; 
    ... 
} 
+0

我得到这个作为我的结果:$ 0 = 352 [没有Objective-C可用描述] – lakesh 2013-02-27 11:20:19

+2

哇,只是做了同样的更新,但你的更好的格式。 – Sulthan 2013-02-27 11:21:46

+0

@lakesh'352 ==&Scaron;'看起来不错。 – trojanfoe 2013-02-27 11:21:57

3

characterAtIndex:返回unichar(2字节Unicode字符),而不是char(1字节的ASCII字符)。通过将其转换为char,您只能获得两个字节中的一个。

你应该打开你的编译器警告。我相信“可疑的隐式转换”应该可以做到。

另外,不能使用isAlpha(char)unichar。使用[[NSCharacterSet letterCharacterSet] characterIsMember:chars]

相关问题