반응형
NSString에 영숫자 + 밑줄 문자 만 포함되어 있는지 확인
az, 0-9 및 _ 만 있으면되는 문자열이 있습니다.
입력이 유효한지 어떻게 확인합니까? 나는 이것을 시도했지만 å, ä, ö, ø 등과 같은 문자를 허용합니다.
NSString *string = [NSString stringWithString:nameField.text];
NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
[string stringByTrimmingCharactersInSet:alphaSet];
[string stringByReplacingOccurrencesOfString:@"_" withString:@""];
BOOL valid = [[string stringByTrimmingCharactersInSet:alphaSet] isEqualToString:@""];
고유 한 문자 집합을 만들 수 있습니다.
NSCharacterSet *s = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"];
일단 그것이 있으면 원래 문자열에없는 모든 것으로 반전합니다.
s = [s invertedSet];
그런 다음 문자열 메서드를 사용하여 문자열에 반전 된 집합이 포함되어 있는지 확인할 수 있습니다.
NSRange r = [string rangeOfCharacterFromSet:s];
if (r.location != NSNotFound) {
NSLog(@"the string contains illegal characters");
}
술어를 사용할 수 있습니다.
NSString *myRegex = @"[A-Z0-9a-z_]*";
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", myRegex];
NSString *string = nameField.text;
BOOL valid = [myTest evaluateWithObject:string];
편집 : 나는 당신이 [NSString stringWithString:nameField.text]
.
nameField.text
대신 사용하십시오 .
좀 더 쉬운 방법,
NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"];
[allowedSet formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
NSCharacterSet *forbiddenSet = [allowedSet invertedSet];
영숫자와 _underscore를 결합합니다.
다음과 같이 사용할 수 있습니다.
NSRange r = [string rangeOfCharacterFromSet:forbiddenSet];
if (r.location != NSNotFound) {
NSLog(@"the string contains illegal characters");
}
추신. @DaveDeLong 예제에서 복사 한 예제 :)
를 사용하여 고유 한 문자 집합을 [NSCharacterSet characterSetWithCharactersInString:]
만든 다음 반환 된 문자열에 길이 값이 있는지 확인하기 위해하던대로 트리밍합니다.
또는 invertedSet
정리 된 문자열을 생성하는 데 도움이되는 경우 설정되지 않은 모든 문자를 제거 하는 데 사용할 수 있습니다 .
문자열의 모든 문자를 반복하여 영숫자인지 확인할 수 있습니다.
BOOL isMatch = YES;
for (int i = 0; i < [string length]; i++) {
unichar c = [string characterAtIndex:i];
if (!isalnum(c) && c != '_') {
isMatch = NO;
break;
}
}
if (isMatch) {
// valid
} else {
// invalid
}
Swift에서 수행하는 방법은 다음과 같습니다 (String 클래스의 확장).
extension String {
func containsValidCharacters() -> Bool {
var charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_")
charSet = charSet.invertedSet
let range = (self as NSString).rangeOfCharacterFromSet(charSet)
if range.location != NSNotFound {
return false
}
return true
}
}
도움이된다면 빠른 도우미입니다
-(BOOL)isString:(NSString *)s{
char letter = 'A';
//BOOL isLetter=NO;
for (int i=0; i<26; i++) {
NSString *temp = [NSString stringWithFormat:@"%c",letter+i];
if ([s isEqualToString:temp]) {
return YES;
}
}
return NO;
}
반응형
'programing' 카테고리의 다른 글
데이터 테이블에 페이지가 하나만있는 경우 페이지 매김 비활성화 (0) | 2021.01.09 |
---|---|
테스트 탐색기에서 실행되지 않는 테스트 (0) | 2021.01.09 |
Random Forests의 out of bag 오류는 무엇입니까? (0) | 2021.01.09 |
LINUX C에서 stdout과 STDOUT_FILENO의 차이점 (0) | 2021.01.08 |
package.json에서 'files'및 'directories'속성을 어떻게 사용합니까? (0) | 2021.01.08 |