Javascript 电话号码验证功能出现问题

Javascript 电话号码验证功能出现问题,javascript,html,validation,Javascript,Html,Validation,用Javascript编写一个简单的注册表单,我不太明白为什么我的手机验证功能不起作用。我想做的是 将字段设置为可选。如果用户没有在字段中输入任何内容,则表单仍然有效并提交 如果用户输入电话号码,则必须采用XXX-XXX-XXXX格式 非常感谢您的帮助 这是我的密码 函数validateform{ var username=document.getElementById'username'; var password=document.getElementById'password'; var

用Javascript编写一个简单的注册表单,我不太明白为什么我的手机验证功能不起作用。我想做的是

将字段设置为可选。如果用户没有在字段中输入任何内容,则表单仍然有效并提交

如果用户输入电话号码,则必须采用XXX-XXX-XXXX格式

非常感谢您的帮助

这是我的密码

函数validateform{ var username=document.getElementById'username'; var password=document.getElementById'password'; var firstname=document.getElementById'firstname'; var lastname=document.getElementById'lastname'; var dob=document.getElementById'dob'; var email=document.getElementById'email'; var phone=document.getElementById'phone'; 如果username.value.length<8{ alertUsername必须至少包含8个字符; username.focus; 返回false; } 如果password.value.length<8{ alertPassword必须至少为8个字符; password.focus; 返回false; } 设isVaild=momentdob.value,'MM/DD/YYYY',true.isValid 如果!有效吗{ alertDate必须为MM/DD/YYYY格式; dob.focus; 返回false; } } 功能验证电话{ var num1=document.getElementById'phone'。值; 如果num1!=&&!num1.match/\\d{2}\\d{8}/{ 警告“这不是正确的电话号码格式”; 返回false; } } 函数VAILDDATECKDATESTRING{ var dateforvailidation=dateString.value; var isVaild=有效期的MomentDate,'MM/DD/YYYY',true.isVaild; 如果有{ 返回true; }否则{ alertDate必须为MM/DD/YYYY格式; form.dob.focus; 返回false; } } 完全合法注册页面

提交 重置 函数validateform{ var username=document.getElementById'username'; var password=document.getElementById'password'; var firstname=document.getElementById'firstname'; var lastname=document.getElementById'lastname'; var dob=document.getElementById'dob'; var email=document.getElementById'email'; var phone=document.getElementById'phone'; 如果username.value.length<8{ alertUsername必须至少包含8个字符; username.focus; 返回false; } 如果password.value.length<8{ alertPassword必须至少为8个字符; password.focus; 返回false; } 设isVaild=momentdob.value,'MM/DD/YYYY',true.isValid 如果!有效吗{ alertDate必须为MM/DD/YYYY格式; dob.focus; 返回false; } } 功能验证电话{ var num1=document.getElementById'phone'。值; 如果num1!=| |!num1.match/\\d{2}\\d{8}/{ 警告“这不是正确的电话号码格式”; 返回false; } } 函数VAILDDATECKDATESTRING{ var dateforvailidation=dateString.value; var isVaild=有效期的MomentDate,'MM/DD/YYYY',true.isVaild; 如果有{ 返回true; }否则{ alertDate必须为MM/DD/YYYY格式; form.dob.focus; 返回false; } } 完全合法注册页面

提交 重置
你的正则表达式不正确。请尝试/^\d{3}-\d{3}-\d{4}$/。 您提供的正则表达式将匹配任何数量的格式,因为

<input type="phone" id="phone" placeholder="Phone Number" onsubmit="return validatePhone();">
下面是正确的正则表达式

^(\d{3}-){2}\d{4}$
最后一个问题是使用始终为trucy的匹配始终返回数组。甚至布尔[]也将为真。所以num1.match/\\d{2}\\d{8}/将始终为false。您应该使用RegExp.prototype.test

函数validateform{ var username=document.getElementById'username'; var password=document.getElementById'password'; var firstname=document.getElementById'firstname'; var lastname=document.getElementById'lastname'; var dob=document.getElementById'dob'; var email=document.getElementById'email'; var phone=document.getElementById'phone'; ifusername.value.length<8{ alertUsername必须至少包含8个字符; username.focus; 返回false; } 如果password.value.length<8{ alertPassword必须至少为8个字符; password.focus; 返回false; } 设isVaild=momentdob.value,'MM/DD/YYYY',true.isValid 如果!有效吗 { alertDate必须为MM/DD/YYYY格式; dob.focus; 返回false; } 返回电话; } 功能验证电话 { 控制台,log'x' var num1=document.getElementById'phone'。值; 如果num1!=&&!/\d{3}-{2}\d{4}/.testnum1 { 警告“这不是正确的电话号码格式”; 返回false; } } 函数VAILDDATECKDATESTRING{ var日期有效性 =dateString.value; var isVaild=有效期的MomentDate,'MM/DD/YYYY',true.isVaild; 如果有{ 返回true; } 否则{ alertDate必须为MM/DD/YYYY格式; form.dob.focus; 返回false; } } 完全合法注册页面

提交 重置
虽然这段代码可以解决这个问题,但它确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答这个问题,而这些人可能不知道您的代码建议的原因。您的回答并没有提供问题的解决方案。您当前的regex/\\d{2}\\d{8}/将匹配xxxxxxxxx,这与您所需的格式完全不同。你是从什么地方抄的这个正则表达式吗?看见可能重复的问题请尝试此ifnum1!=&&/^\d{3}-?\d{3}-?\d{4}$/.testnum1返回false;此处破折号-是可选的。在/^\d{3}-\d{3}-\d{4}$/中,破折号是必需的。非常好,它工作得非常好。我只想问你最后一个问题。我不清楚该怎么做,但是当用户按下submit并且一切都正确时,它应该会弹出一条消息,与成功提交的表单一致。如果我是正确的,我需要调用validateform函数,但我不清楚我需要做什么
^(\d{3}-){2}\d{4}$
if (num1 !== "" && !/(\d{3}-){2}\d{4}/.test(num1))