java regex - 仅匹配一个匹配项

时间:2013-04-10 05:16:31

标签: java regex

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

首先删除短划线。

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

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

答案 2 :(得分:0)

使用在输入开始时锚定的负面预测:

^(?!(.*-){2})[A-Za-z -]*