【问题标题】:"Not Equal" sign not recognised in Javascript Form ValidationJavascript 表单验证中无法识别“不等于”符号
【发布时间】:2013-08-22 14:28:27
【问题描述】:

谁能告诉我如何改进此代码,最重要的是对我的电子邮件验证进行排序,以便在 Z 不等于任何内容或字符串“电子邮件”的所有情况下都能正常工作

所有字段都以已输入的适当措辞开头,作为客户示例。

提前致以诚挚的问候。

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;
        }
    }
}

【问题讨论】:

  • 你有没有试过alert(z)在验证前看看它的值是多少?
  • 一些提示:a) 永远不要将变量命名为x, y, z,如果它们不代表矢量数据等。 b) 更正你的缩进。 c) 保持代码干燥:创建一个函数来检查 null"" 或给定值(例如“姓名”、“电子邮件”、“电话号码”)。
  • 当 z 为 null 或 z 为空字符串或 z 等于“电子邮件”时,您的条件将为真。它不适合你吗?究竟是什么问题?现在,如果您需要改进建议,请使用占位符属性,那么您就不必检查“电子邮件”:w3schools.com/tags/att_input_placeholder.asp
  • 为回复干杯,alert(z) 返回,“Email”,默认值。无论如何,它都会运行该方法。只有当 z 不等于 null、空字符串或“电子邮件”时,我才需要条件为真。
  • 不应该是&&而不是||

标签: javascript html forms validation


【解决方案1】:

你可以做一些事情。

z==null || z=="" 可以替换为 !Boolean(z)!z

z!=null || z!="" 可以替换为 Boolean(z)!!z

除非您期望类型强制,否则您还应该尝试始终使用 === 而不是 ==。

因此,您对z == "Email" 的检查可能会更改为类似z.toLowerCase() === "email" 的内容

您似乎也重复了代码 --> z==null || z=="" || z=="Email" (x2)。您可以结合电话号码验证和电话长度验证。

【讨论】:

    【解决方案2】:

    看看this validation code,它是 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)
    

    【讨论】:

      【解决方案3】:

      变化:

      if (z!=null || z!="" || z!="Email")
      

      到这里:

      if (z!=null && z!="" && z!="Email")
      

      您的验证应该都是 AND 与 OR,因为您希望在提交之前所有这些都是真实的。

      【讨论】:

        【解决方案4】:

        您是否考虑过使用 validate.js 之类的东西,而不是手动编写表单验证?

        示例代码:

        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
            }
        });
        

        【讨论】:

          猜你喜欢
          • 2012-10-05
          • 2015-10-14
          • 1970-01-01
          • 1970-01-01
          • 2016-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多