2016-11-18 11 views
2

文字列を検証して英数字で、 " - "と "。"が含まれているかどうかを確認したい英数字で入力します。だから私は 正規表現を使用して文字列を検証する

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-zA-Z0-9\\.\\-]" 
            options:NSRegularExpressionCaseInsensitive 
            error:&error]; 
NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
BOOL valid = [regexTest evaluateWithObject:URL_Query]; 

正規表現パターンを形成するために、このような何かを行っているアプリケーションは、正規表現パターンを形成することができない旨のクラッシュ。誰かが私に間違っていることを私にquickfixを与えることができますか?前もって感謝します。

+1

このようにダッシュをエスケープしてみてください: '[a-zA-Z0-9。\ - ]' –

+0

しかし。メタキャラクターは? –

+0

文字クラスの末尾にある「 - 」はエスケープする必要はありません。正規表現は有効です。しかし、私はこのタスクに '^ [a-zA-Z0-9 .-] + \\ z'を使用します。 –

答えて

2

あなたはNSPredicateSELFにタイプNSStringの変数を渡す必要がありに一致します。

NSString * URL_Query = @"PAS.S.1-23-"; 
NSString * regex = @"[a-zA-Z0-9.-]+"; 
NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
BOOL valid = [regexTest evaluateWithObject:URL_Query]; 

SELFは(正規表現があると一致するとあなたは何のアンカーを必要としないObjective C demo

ノートを参照してください。デフォルトでアンカーされています)、1つ以上のシンボルに一致するように+を追加するか、*を0+に一致させる必要があります(空の文字列も許可します)。

文字クラスの先頭と末尾にハイフンをエスケープする必要はなく、文字クラス内のドットはリテラルドットcharとして扱われます。

また、大文字と小文字の両方のASCII文字の範囲がパターン内にあるため、大文字と小文字を区別しないフラグを正規表現に渡す必要はありません。

+0

私にみましょう!私に秒を与える –

+1

それは素晴らしかった..> !!!!!!!答えを受け入れる! –

関連する問題