&引用;“不相等”;Javascript表单验证中未识别签名
有人能告诉我如何改进这段代码吗?最重要的是,在Z不等于零或字符串“Email”的所有情况下,对我的电子邮件验证进行排序 所有字段都以已输入的适当措辞开头,作为客户的示例 提前致以亲切的问候&引用;“不相等”;Javascript表单验证中未识别签名,javascript,html,forms,validation,Javascript,Html,Forms,Validation,有人能告诉我如何改进这段代码吗?最重要的是,在Z不等于零或字符串“Email”的所有情况下,对我的电子邮件验证进行排序 所有字段都以已输入的适当措辞开头,作为客户的示例 提前致以亲切的问候 function validateForm() { //Uses HTML field IDs var x=document.forms["myForm"]["name"].value; var y=document.forms["myForm"]["phone"].value; var z=document
function validateForm()
{
//Uses HTML field IDs
var x=document.forms["myForm"]["name"].value;
var y=document.forms["myForm"]["phone"].value;
var z=document.forms["myForm"]["email"].value;
//Name locator
if (x==null || x=="" || x=="Name")
{
alert("Please enter the your name.");
return false;
}
//Contact method locator
if ((y==null || y=="" || y=="Phone Number")&&(z==null || z=="" || z=="Email"))
{
alert("Please enter a contact method.");
return false;
}
//Phone numeric validation, this runs if Email field is not edited
if (z==null || z=="" || z=="Email")
{
if (isNaN(y)||x.indexOf(" ")!=-1)
{
alert("Telephone must be a numeric value.");
return false;
}
}
//Phone length validation, this runs if Email field is not edited
if (z==null || z=="" || z=="Email")
{
if (y.length > 14)
{
alert("Telephone must be valid.");
return false;
}
}
//Email validation, does not work, this should run only when something is entered into the field
if (z!=null || z!="" || z!="Email")
{
var atpos=z.indexOf("@");
var dotpos=z.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=z.length)
{
alert("This is not a valid e-mail address");
return false;
}
}
}
函数validateForm()
{
//使用HTML字段ID
var x=document.forms[“myForm”][“name”].value;
var y=document.forms[“myForm”][“phone”].value;
var z=document.forms[“myForm”][“email”].value;
//名称定位器
如果(x==null | | x==“”| | x==“名称”)
{
警告(“请输入您的姓名。”);
返回false;
}
//接触法定位器
如果((y==null | | y==“”| | y==“电话号码”)&&(z==null | | z==“”| | z==“电子邮件”))
{
警报(“请输入联系方式”);
返回false;
}
//电话数字验证,如果未编辑电子邮件字段,则运行此验证
如果(z==null | | z==“电子邮件”)
{
if(isNaN(y)| | x.indexOf(“”)=-1)
{
警报(“电话必须是数字值”);
返回false;
}
}
//电话长度验证,如果未编辑电子邮件字段,则运行此验证
如果(z==null | | z==“电子邮件”)
{
如果(y.长度>14)
{
警报(“电话必须有效。”);
返回false;
}
}
//电子邮件验证不起作用,应仅在字段中输入内容时运行
如果(z!=null | | z!=“电子邮件”)
{
var atpos=z.indexOf(“@”);
var dotpos=z.lastIndexOf(“.”);
如果(atpos你可以做一些事情
z==null | | z==”
可以替换为!Boolean(z)
或!z
z!=null | | z!=”
可以替换为Boolean(z)
或!!z
您还应该尝试始终使用===而不是==除非您希望使用类型强制
因此,您对z==“Email”
的检查可能会更改为类似于z.toLowerCase()==“Email”
您似乎也在重复代码-->z==null | | z==“”| | z==“Email”
(x2)。您可以将电话数字验证和电话长度验证结合起来。看看哪个是jQuery和Javascript的组合。它将为您提供一些优秀的见解,帮助您了解应该查找什么以及如何处理典型表单的特定元素(包括电子邮件地址的GREAT RegEx示例:
/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value)
更改:
if (z!=null || z!="" || z!="Email")
为此:
if (z!=null && z!="" && z!="Email")
您的验证都应该是ANDs vs ORs,因为您希望在提交之前所有这些都是真实的。您是否考虑过使用类似的方法而不是手动编写表单验证
示例代码:
var validator = new FormValidator('example_form', [{
name: 'req',
display: 'required',
rules: 'required'
}, {
name: 'alphanumeric',
rules: 'alpha_numeric'
}, {
name: 'password',
rules: 'required'
}, {
name: 'password_confirm',
display: 'password confirmation',
rules: 'required|matches[password]'
}, {
name: 'email',
rules: 'valid_email'
}, {
name: 'minlength',
display: 'min length',
rules: 'min_length[8]'
}], function(errors, event) {
if (errors.length > 0) {
// Show the errors
}
});
您是否尝试过在验证之前发出警告(z)
,查看它的值是什么?一些提示:a)如果变量不代表矢量数据或类似数据,则永远不要命名变量x、y、z
。b)更正缩进。c)保持代码干燥:创建一个检查null
、“
或给定值(例如“name”的函数,“Email”,“Phone Number”)。当z为null或z为空字符串或z等于“Email”时,您的条件将为真。这对您来说不起作用吗?到底是什么问题?现在,如果您想获得改进建议,请使用占位符属性,那么您就不必检查“Email”:为回复干杯,警报(z)返回,“Email”,默认值。不管如何,它都会运行该方法。只有当z不等于null、空字符串或“Email”时,我才需要条件为true。它不应该是&&而不是||