我有一个功能来验证联系表格中的电话号码,但我需要能够输入" xxx xxx xxxx"例如,而不仅仅是" xxxxxxxx"
数字格式应为:
xxx xxx xxxx
XXX-XXX-XXXX
xxx.xxx.xxxx
function validatePhone() {
var phone = document.getElementById("phone").value;
if (phone.length == 0) {
var w = document.getElementById("phoneError").textContent;
alert(w);
return false;
}
if (phone.length != 10) {
var r = document.getElementById("phoneError").textContent;
alert(r);
return false;
}
// THIS IS NOT WORKING
if (
!phone.match(/^[0-9]{10}$/) ||
!phone.match(/^\d{3}-\d{3}-\d{4}$/) ||
!phone.match(/^\d{3}.\d{3}.\d{4}$/)
) {
var t = document.getElementById("phoneError").textContent;
alert(t);
return false;
}
}
答案 0 :(得分:0)
两件事:首先,你要混合AND和OR:
if (
!phone.match(/^[0-9]{10}$/) ||
!phone.match(/^\d{3}-\d{3}-\d{4}$/) ||
!phone.match(/^\d{3}.\d{3}.\d{4}$/)
) {
只要其中一个条件失败,它就会返回false(基本上总是这样)。当没有任何表达式匹配时,您希望应用此if
,例如当他们都是false
时。因此,您必须使用&&
而不是||
。不是AND而不是b而不是c。
第二:你的第三个正则表达式有点偏离:.
表示"任何字符",所以这个正则表达式也匹配" 123x123y1234"。您需要使用反斜杠转义点:/^\d{3}\.\d{3}\.\d{4}$/
此外,您可以显着改进此代码。你有5个条件,可以一个处理(如果你想允许输入" 123.123 234",否则你将不得不使用3个正则表达式)。并且只是检查正则表达式是否与字符串匹配,您可能应该使用test()
,because it is just slightly faster(在您的情况下它不重要,但只是出于原则)。
您可以将代码缩减为:
if (/^\d{3}[\s-.]\d{3}[\s-.]\d{4}$/.test(document.getElementById("phone").value) === false) {
alert (document.getElementById("phoneError").textContent);
return false;
}