0

正規表現を使用して検証を実行しているテキストフィールドがあります。しかし、ユーザーがテキストフィールドにハイフンを入力してボタンをクリックすると問題が発生し、入力が無効であるという警告が表示されます。文字列と特殊文字の検証を実行していますが、特殊文字については検証されていません。

これは私のコードです:

NSRegularExpression *regex = [[[NSRegularExpression alloc]
                                               initWithPattern:@"[a-zA-Z][#$%&*()']" options:0 error:NULL] autorelease];
4

3 に答える 3

0

私はobjective-cにあまり詳しくなく、それは正規表現のフレーバーであり、あなたが何を求めているのか完全にはわかりませんが、正規表現はハイフンと一致しません. 文字の後に次のいずれかの文字が続くものと一致する必要があります: #$%&*()'. 以下は、一致する必要があるものと一致しないもののいくつかの例です。

SHOULD MATCH              SHOULD NOT MATCH
----    ----            ----  ------  ------
 a#      a$              A     --      C3PO
 A)      A*              #     -       huh?
 T%      Q#              g-    AA##    123
 j&      a(              $R    ()      bbb5
 z'      B&              qq    "D%"    ()-

これらのいずれかが一致させたいものと一致しない場合は、一致させたいパターンを含む質問をする必要があります。いくつかの例は次のとおりです。

  • 「任意の数の文字、括弧、アスタリスク、アンパサンド」
  • []「ハイフンと角括弧 ( )を除く任意の数の任意の文字」
  • 「1 ~ 3 個の大文字とそれに続くオプションの数字」
  • ...またはあなたの要件を満たすものなら何でも。

正規表現は、テキストベースのデータのほぼすべてのパターンを指定できる言語です。パターンに一致させる必要がない場合、正規表現は必要ないかもしれません。幸運を!

于 2012-04-12T14:02:25.750 に答える
0

ユーザーが気に入らない文字を入力したため、アラートを表示しないでください。これはひどい UX です。特に、タイプミスが起こりやすいソフト キーボードを使用している場合はなおさらです。

代わりに、入力を処理して、必要な文字を抽出します。電話番号の入力フィールドを含む Web フォームを作成することを考えてみてください。電話番号の人間が読める形式 (ハイフン、国コードのプラスのプレフィックスなど) には関心がありません。しかし、ユーザーがこれらの文字を入力することを妨げるものは何もありません。無効な文字を取り除き、必要なものを残すことができるコードがあります。

NSStringを使用すると、これも簡単になります-stringByTrimmingCharactersInSet:NSCharacterSet特定のインスタンスから削除したい文字を含む を定義しNSString、 invokeを実行すると、必要な文字のみを-stringByTrimmingCharactersInSet:含む自動解放されたインスタンスが取得されます。次に例を示します。NSString

NSString          *rawInput; // value assigned elsewhere to @"555-555-1212"
NSCharacterSet    *characterSet = [ NSCharacterSet characterSetWithCharactersInString: @"-" ];
NSString          *processedInput = nil;

processedInput = [ rawInput stringByTrimmingCharactersInSet: characterSet ];

NSLog( @"processedInput: %@", processedInput ); // logs "5555551212"
于 2012-04-12T14:27:33.387 に答える
0

を使用してハイフンの発生を確認できますrangeOfString

NSRange k = [str rangeOfString:@"-"];
if(k.length != 0)
  ... Show your alert message

これはあなたの要件を満たすと思います.正規表現の場合は複雑にする必要はありません..

于 2012-04-12T07:14:17.450 に答える