如何使用正则表达式避免在文本字段中输入连字符?

时间:2012-04-12 05:18:53

标签: iphone objective-c regex nsregularexpression

我有一个文本字段,我正在使用正则表达式执行验证。但是当用户在文本字段中输入连字符并单击按钮时我会遇到问题,然后应该提供一个警报,表明没有输入无效。我正在对字符串和特殊字符执行验证,但对于特殊字符,它没有得到验证。

这是我的代码:

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

3 个答案:

答案 0 :(得分:0)

您可以使用rangeOfString

检查连字符的出现次数
NSRange k = [str rangeOfString:@"-"];
if(k.length != 0)
  ... Show your alert message

我觉得这将满足您的要求,无需介入正则表达式的复杂性。

答案 1 :(得分:0)

我对objective-c不太熟悉,而且它的正则表达式的风格,我不是完全清楚你所要求的,但你的正则表达式将不< / em>匹配连字符。它应匹配一个字母,后跟下列字符之一:#$%&*()'。以下是应该匹配的一些示例和一些不匹配的内容:

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%"    ()-

如果其中任何一个与您想要匹配的内容不一致,那么您需要提出一个包含您想要匹配的所需模式的问题。一些例子是:

  • “任意数量的字母,括号,星号,&符”
  • “除连字符和方括号([])”
  • 之外的任何数字
  • “一到三个大写字母后跟一个可选数字”
  • ......或满足您要求的任何内容。

正则表达式是一种允许指定几乎任何基于文本的数据模式的语言。如果您不需要匹配模式,则可能不需要正则表达式。祝你好运!

答案 2 :(得分:0)

请勿显示提醒,因为用户输入了您不喜欢的字符。这是非常糟糕的用户体验,特别是当使用软键盘更容易发生错别字时。

相反,处理输入以提取您想要的字符。考虑编写一个带有电话号码输入字段的Web表单。您对电话号码中的人类可读格式不感兴趣 - 连字符,国家/地区代码的加号前缀等。但是没有任何东西可以阻止用户输入这些字符。你有一些代码可以删除你想要的无效字符。

NSString甚至可以通过-stringByTrimmingCharactersInSet:轻松实现这一目标。您可以使用要从给定NSCharacterSet实例中删除的字符定义NSString,调用-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"