说,我在验证输入字段时使用了这种模式“[A-Za-z - ] *”:
if (input.matches("[A-Za-z -]*")) {
return true;
} else {
return false;
}
基本上,我正在检查输入是否符合我的字段验证要求(字母,空格和短划线(仅允许一个短划线))。我的问题是我应该返回true,只有它有字母,空格和短划线(仅限一个DASH),我的当前代码返回true,即使我输入了很多破折号。如何限制我的模式以检测破折号是否超过一个?谢谢!
答案 0 :(得分:2)
以下内容相当于您的正则表达式,但它最多允许一个破折号:
[A-Za-z ]*-?[A-Za-z ]*
匹配零个或多个字母/空格,后跟最多一个破折号,后跟零个或多个字母/空格。
答案 1 :(得分:0)
首先删除短划线。
if(input.indexOf('-') != 0) input.replaceFirst("-", " ");
然后,由于您只删除了一个破折号,因此可以在不检查连字符的情况下运行正则表达式查询。如果存在,则查询将返回false。
答案 2 :(得分:0)
使用在输入开始时锚定的负面预测:
^(?!(.*-){2})[A-Za-z -]*