programing

NSString에 영숫자 + 밑줄 문자 만 포함되어 있는지 확인

nasanasas 2021. 1. 9. 10:07
반응형

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;
}

참조 URL : https://stackoverflow.com/questions/7546235/check-if-nsstring-contains-alphanumeric-underscore-characters-only

반응형