2011-08-03 8 views
3

私は、入力をUITextFieldに入力して検証するはずの次のコードを持っています。それは働いているようではありませんし、なぜ私は少し混乱しています。iPhone:正規表現とUITextFieldのテキスト入力の検証が失敗しています

誰かに私に助言をお願いできますか?

NSString *const regularExpression = @"([0-9a-zA-Z\\s]{1,6})"; 
NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regularExpression options:NSRegularExpressionCaseInsensitive error:&error]; 

      if (error) 
       { 
       NSLog(@"error %@", error); 
       } 

NSUInteger numberOfMatches = 
[regex numberOfMatchesInString:s         options:0             range:NSMakeRange(0, [s length])]; 
NSLog(@"index = %d", i); 
NSLog(@"Value of TextField = %@", s); 
NSLog(@"Regular expression is = %@", regularExpression); 
if (numberOfMatches <= 0) 
    { 
    NSLog(@"Failed regex test "); 
    } 

この文字列は、正規表現のテストに失敗する必要があります "Einxnkxkd Xnckck"

をしかし、それは渡されました。

よくわからない理由と理由... ここに欠けているものは何ですか? おかげ

答えて

3

numberOfMatchesInString:の方法内の一致を検索します。 文字列全体に対してパターンをテストしません。

パターン([0-9a-zA-Z\\s]{1,6})が少なくともテスト文字列Einxnkxkd Xnckckの最初の6文字と一致しているため、これは合格です。Einxnkです。実際に、私は試合をたくさん見つけることができます:EEinを、inxなど

あなたは全体の文字列がパターンに一致することを確認したい場合は、終わりをマークするために、文字列の先頭と$を示すために^を使用あなたのパターンは^([0-9a-zA-Z\\s]{1,6})$になります。

+0

ありがとうございました。 – banditKing

1

あなたは正確に文字列に式を制限したい場合は、あなたが^ .. $で表現ラップする必要があります。

NSString *const regularExpression = @"^([0-9a-zA-Z\\s]{1,6})$"; 

編集:テストするRegEx Airアプリを使用することは、それはかなりです便利な(または他のreg expテスター)

+0

あなたの助けとアプリへのリンクをありがとう – banditKing

関連する問題