无论如何,Javascript电话和号码字段无法正确验证提交表单

时间:2013-07-02 20:55:59

标签: javascript forms validation

更新

如果输入9位数的电话号码,下面的脚本会抛出错误,并接受10位数字......但它也只接受一位数字 - 我怎样才能阻止这种情况发生。

对于收集器字段,我需要它只接受11个数字。

我正在尝试修改我的验证码以验证电话号码,这似乎是一项非常简单的任务,但我无法让它正常工作。

脚本应该检查它是否是9位长,空格,破折号或没有空格是可以的。如果没有输入电话,则应提供所需的错误。如果该字段仅输入8位数字,则应该给出无效的电话错误。

请参阅此jsfiddle的代码 - http://jsfiddle.net/5zFqS/7/

function validate_required(field,alerttxt) {
  with (field) {
    if (value==null||value=="") {
      alert(alerttxt);return false;
    } else {return true;}
  }
}

function validate_email(field,alerttxt) {
  with (field) {
    apos=value.indexOf("@");
    dotpos=value.lastIndexOf(".");
    if (apos<1||dotpos-apos<2)
      {alert(alerttxt);return false;}
    else {return true;}
  }
}

function validate_Phone(field,alerttxt) {
    var phoneno = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;  
    if(field.value.match(phoneno))  {
      alert(alerttxt);return false;
    } else {return true;}
  }


function validate_collector(field,alerttxt) {
  var collect = /^\d{12}$/;  
    if(field.value.match(collect))  {
      alert(alerttxt);return false;
    } else {return true;}

}

function validate_form(thisform) {
  with (thisform) {
    if (validate_required(firstName,"Please enter your First Name")==false)
    {firstName.focus();return false;}

    if (validate_required(lastName,"Please enter your Last Name")==false)
    {lastName.focus();return false;}

    if (validate_required(email,"Please enter your Email Address")==false)
    {email.focus();return false;}

    if (validate_email(email,"Please enter a valid Email Address")==false)
      {email.focus();return false;}

    if (validate_required(phone,"Please enter your Phone")==false)
    {phone.focus();return false;}

    if (validate_Phone(phone,"Please enter a valid Phone Number")==false)
    {phone.focus();return false;}

    if (validate_required(province,"Please select your Province")==false)
    {province.focus();return false;}

    if (validate_required(collector,"Please enter Collector Number")==false)
    {collector.focus();return false;}

    if (validate_collector(collector,"Please enter a valid Collector Number")==false)
    {collector.focus();return false;}



    }
  }

我认为我有语法错误,但我看不到它。

2 个答案:

答案 0 :(得分:4)

您需要删除此行末尾的分号:

if (field.match(/^\d{9}/));

你说空间等应该没问题。在这种情况下,您需要删除(或忽略)它们:

var reg = /\D/g;    // \D identifies non-digit characters, g means 'global'
var stripped = "888-777 66st".replace(reg,"");
// returns: 88877766

此外,建议不要使用

  

因为它可能是令人困惑的错误和兼容性问题的来源

MDN reference

答案 1 :(得分:0)

而不是

if (field.match(/^\d{9}/))

使用此

if (!field.match(/\d{9}/))