2013-04-19 3 views
0

다른 문자없이 10 자리 숫자와 일치하는 정규 표현식을 작성하려고합니다. 예. 나머지 9 개 자리는 내가 다른 정규 표현식을 작성하는 시도했지만 아무도 일하지 어떤iOS의 10 자리 숫자에 대한 정규 표현

할 수 있지만 2-9 사이 2,345,678,901

첫 번째 숫자는 있어야한다.

NSString * newString = [textField.text stringByReplacingCharactersInRange : range withString : string]; 도움을

//^([0-9]+)?(([0-9]{9})?)?$  (([2-9]{1})?)?(([0-9]{8,9})?)? 
NSString *expression = [NSString stringWithFormat:@"^(([2-9]{1})?)?(([0-9]{8,9})?)?$"]; 

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression 
                     options:NSRegularExpressionCaseInsensitive 
                     error:nil]; 
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString 
                options:0 
                 range:NSMakeRange(0, [newString length])]; 
if (numberOfMatches == 0) { 
    return NO; 
} 

return YES; 

`

감사합니다.

답변

2

아주 간단한 정규식은 당신이 필요에 맞게

^[2-9][0-9]{9}$ 

그것은 2..9 범위의 첫 번째 자리와 0..9 범위에서 다른 아홉 자리 숫자 10 자리의 일치 합계.

이 표현식은 부분 문자열이 아닌 전체 문자열의 유효성을 검사하는 데 적합합니다. textField:shouldChangeCharactersInRange:replacementString:에서 숫자를 사용할 수있게되면 유효성을 검사 할 수 없습니다.

입력하기 전에 입력 형식을 확인하는 것은 좋지 않습니다. 입력하기 전에 커서를 올바른 위치로 이동하여 전화 번호를 임의의 순서로 입력하도록 선택할 수 있기 때문입니다. 대신 UITextFieldkeyboardType 속성을 UIKeyboardTypeDecimalPad으로 설정하고 사용자가 원하는만큼 자릿수를 입력하도록해야합니다. 입력이 끝났다고 말할 때까지 입력을 제한하지 마십시오. 예를 들어 메모장에서 데이터를 붙여 넣은 다음 분리 기호를 지우거나 앞쪽에있는 섹션을 삭제하기 전에 끝에 몇 자릿수를 입력 할 수 있습니다 입력의.

대신 위의 표현식을 textFieldShouldEndEditing: 메서드에서 사용해야합니다. 정규 표현식이 일치하면 YES; 그렇지 않은 경우 NO을 반환하고 숫자를 변경해야한다는 시각적 피드백을 사용자에게 제공합니다. UITextFieldDelegate 설명서의 textFieldShouldEndEditing: 메서드 토론 섹션을 읽으십시오.

+0

나는 이전에 같은 정규 표현식으로 시도했지만 시뮬레이터는 어떤 문자도 입력하지 않았다. – user2229791

+0

도 실제 장치를 않습니다 ... – user2229791

+0

@ user2229791 부분 유효성 검사를 위해 표현식을 사용하려고한다는 것을 알지 못했습니다. 편집을 한번보세요. – dasblinkenlight