我有一个位置搜索字段,需要允许城市和州或邮政编码。我有两个单独的正则表达式模式,每个模式都单独工作,但在组合它们时遇到问题。
这个是针对城市和州的;它检查以确保至少有两个字母,然后是一个逗号、一个可选的空格,以及另外两个字母。效果很好。
var str="abc, de";
var patt1 = /^[a-z]{2,},\s*[a-z]{2}$/i;
if(patt1.test(str)) {
alert("true");
}
else {
alert("false");
}
这个是邮政编码的。它会检查以确保正好有 5 个数字。也有效。
var str="01235";
var patt1 = /[0-9]{5}/;
if(patt1.test(str)) {
alert("true");
}
else {
alert("false");
}
我知道您可以使用括号和管道符号来匹配替代项;我在过去两次验证了两种不同的电话号码格式 - (xxx) xxx-xxxx 或 xxx-xxx-xxxx:
var pattern = /((^\([0-9]{3}\) [0-9]{3}[-]{1}[0-9]{4}$)|(^[0-9]{3}-[0-9]{3}[-]{1}[0-9]{4}$))/;
但是当我尝试使用我的城市/州和邮政编码检查时,它不起作用。如果我输入邮政编码,它会正确返回 true,但城市和州的任何和所有组合都会返回 false,即使在单独使用城市/州模式时它们正确返回 true。在第二种可能性中,它似乎忽略了恰好 5 个数字的要求;如果少于 5 个,它将返回 false,但如果超过 5 个,它将返回 true。我在哪里出错了?
var patt1 = /((^[a-z]{2,},\s*[a-z]{2}$\i)|(^[0-9]{5}))/;
我在这里有一个小提琴:http: //jsfiddle.net/EmmyS/fHkZU/