2013-02-27 4 views
1

사용자가 일부 데이터를 TextField에 입력 할 수 있도록 허용합니다. 사용자는 Š1234D을 TextField에 입력합니다.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 (0126)을 반환하고 (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 [목표 -C 설명이 없습니다] – lakesh

+2

와우, 방금 같은 업데이트를 만들었지 만 귀하의 서식이 더 좋습니다. – Sulthan

+0

@lakesh'352 == & Scaron;'그렇게 보이네요. – trojanfoe

3

characterAtIndex:unichar (2 바이트 유니 코드 문자)를 반환하지 char (1 바이트 ASCII 문자). 이 파일을 char으로 전송하면 두 바이트 중 하나만 가져옵니다.

컴파일러 경고를 켜야합니다. "의심스러운 암시 적 전환"이 트릭을해야한다고 생각합니다.

isAlpha(char)에는 unichar을 사용할 수 없습니다. [[NSCharacterSet letterCharacterSet] characterIsMember:chars]