0

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

这是我的代码:

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

3 回答 3

0

不要因为用户输入了您不喜欢的字符而显示警报。这是糟糕的用户体验,尤其是在使用更容易出现拼写错误的软键盘时。

相反,处理输入以提取您想要的字符。考虑编写一个带有电话号码输入字段的 Web 表单。您对电话号码中的人类可读格式不感兴趣——连字符、国家代码的加号前缀等。但没有什么可以阻止用户输入这些字符。您有可以去除无效字符的代码,留下您想要的。

NSString甚至可以让您轻松完成-stringByTrimmingCharactersInSet:. NSCharacterSet您使用要从给定实例中删除的字符定义 an 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

我觉得这将满足您的要求,如果 regexp.. 则无需增加复杂性。

于 2012-04-12T07:14:17.450 回答
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%"    ()-

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

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

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

于 2012-04-12T14:02:25.750 回答