web-dev-qa-db-ja.com

特殊文字がないかNSStringを確認します

NSStringで特殊文字、つまりa-z、A-Z、0-9以外のものをチェックしたい。

存在する特殊文字の数やその位置を確認する必要はありません。特定の文字列に文字が含まれているかどうかを確認するだけです。もしそうなら、私は「エラー!」または同様の何かを表示できるようにしたいと思います。

たとえば、jHfd9982は問題ありませんが、asdJh992 @は問題です。

また、アクセント、分音記号などを含む文字は許可されません。

これについてどうすればいいですか?

ありがとう!

マイケル

33
Michael
NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789"] invertedSet];

if ([aString rangeOfCharacterFromSet:set].location != NSNotFound) {
  NSLog(@"This string contains illegal characters");
}

正規表現を使用することもできます(この構文はRegexKitLiteからです: http://regexkit.sourceforge.net ):

if ([aString isMatchedByRegex:@"[^a-zA-Z0-9]"]) {
  NSLog(@"This string contains illegal characters");
}
109
Dave DeLong

ここで、文字列に特殊文字があるかどうかを確認するために使用できるコード

NSString *string = <your string>;

NSString *specialCharacterString = @"!~`@#$%^&*-+();:={}[],.<>?\\/\"\'";
NSCharacterSet *specialCharacterSet = [NSCharacterSet
                                       characterSetWithCharactersInString:specialCharacterString];

if ([string.lowercaseString rangeOfCharacterFromSet:specialCharacterSet].length) {                
    NSLog(@"contains special characters");
}
8
loganathan

文字列内に文字が見つからない場合に文字セットを使用してNSStringを検索すると、rangeOfCharacterFromSet:は{NSNotFound、0}の範囲を返します

文字セットは[NSCharacterSet symbolCharacterSet]または独自のセットのようになります。受け入れ可能な文字のセットを持つことができるように、文字セットを反転することもできます。

6
Mark

任意の文字列(テキストフィールドテキストを含む)から特殊文字と数字を削除する場合、編集中に以下の行が非常に便利です。

#define ACCEPTABLE_CHARACTERS @"!~`@#$%^&*-+();:=_{}[],.<>?\\/|\"\'0123456789"

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS];

    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

    return (![string isEqualToString:filtered]) ? NO : YES;
}
4
Waleed Mahmood

このコードでは、UITextField入力に数値のみを使用できます。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
        return NO;
    else
        return YES;

}
2
Gaurav