1

我在验证输入字段时使用了这种模式“[A-Za-z -]*”:

if (input.matches("[A-Za-z -]*")) {
   return true;
} else {
   return false;
}

基本上,我正在检查输入是否符合我的字段验证要求(字母、空格和破折号(只允许一个破折号))。我的问题是,只有当它包含字母、空格和破折号(仅限 ONE DASH)时,我才应该返回 true,即使我输入了很多破折号,我当前的代码也会返回 true。如何限制我的模式以检测破折号是否超过一?

4

3 回答 3

2

以下相当于您的正则表达式,除了它最多允许一个破折号:

[A-Za-z ]*-?[A-Za-z ]*

这匹配零个或多个字母/空格,后跟最多一个破折号,后跟零个或多个字母/空格。

于 2013-04-10T05:18:18.190 回答
0

使用锚定在输入开始处的否定前瞻:

^(?!(.*-){2})[A-Za-z -]*
于 2013-04-10T05:27:35.683 回答
0

首先删除破折号。

if(input.indexOf('-') != 0) input.replaceFirst("-", " ");

然后,由于您只删除了一个破折号,您可以运行您的正则表达式查询而不检查连字符。如果存在,则查询将返回 false。

于 2013-04-10T05:20:53.117 回答