【问题标题】:Javascript phone number validationJavascript电话号码验证
【发布时间】:2010-03-05 10:40:44
【问题描述】:

我需要在 javascript 中验证电话号码。 要求是:

它们应该是 10 位数字,没有逗号,没有 破折号,只是数字,而不是 1+在前面

这是我到目前为止写的内容

function validatePhone(field,alerttxt) {
    with (field) {
        if(value.length > 10) {
            alert(alerttext);
            return false;
        }
        for(i = 0; i < value.length; i++) {
            if(parseInt(value[i]) == NaN) {
                alert(alerttxt);
                return false;
            }
        }
        return true;
    }
}
function validateForm(thisform) {
        if (validatePhone(phone,"Invalid phone number")==false) {
            phone.focus();
            return false;
        }

    }
}
  <form action="post.php" method="post" id="contactform" onsubmit="return validateForm(this)">
    <ol>
        <label for="phone">Your phone <span class="red"></span></label>
        <input id="phone" name="phone" class="text" />
      </li>
    </ol>
  </form>

但是,显然它不起作用。 我如何编写validatePhone() 函数才能使其正常工作?

【问题讨论】:

  • 多么不友好的系统。让人们输入空格和破折号,然后忽略它们。那么国际电话号码呢?
  • 这看起来像是一项学校作业。对于严重的使用,你不应该使用正则表达式来validate phone numbers properly
  • @DanDascalescu 其实那时候还不是学校作业。只是 RentACoder 上的一个糟糕的工作

标签: javascript validation


【解决方案1】:
phone = phone.replace(/[^0-9]/g, '');
if(phone.length != 10) { 
   alert("not 10 digits");
} else {
  alert("yep, its 10 digits");
} 

这将根据您的要求验证和/或更正,删除所有非数字。

【讨论】:

  • 正如我所说的“验证和/或正确”就是为什么不只是匹配。强迫某人输入一个没有空格或破折号的电话号码非常糟糕的用户体验,因为它们很容易删除。
  • @FedericoCulloca:对于正确验证电话号码的一般情况,没有“正确”的正则表达式。 See why here. Aaron 的答案是本页唯一正确的答案。
  • @DanDascalescu - 没有人询问一般情况。
【解决方案2】:

Google 的libphonenumber 非常有助于验证和格式化世界各地的电话号码。与使用 RegEx 相比,它更容易、更简单、更健壮,而且它有 JavaScript、Ruby、Python、C#、PHP 和 Objective-C 风格。

【讨论】:

【解决方案3】:

你可以使用正则表达式:

function validatePhone(field, alerttext) {
    if (field.match(/^\d{10}/)) {
         return true;
    } 
    alert(alerttext);
    return false;
}

【讨论】:

  • 不应该,其实用正则表达式来validate phone numbers properly
  • 他的要求是他应该检查 10 位格式,而不需要其他任何内容。所以这个正则表达式检查应该没问题。你是对的:我不喜欢强迫我使用特定电话号码格式的应用程序。检查最小长度、数字和任何顺序的一些 ()-+/ 字符可能没问题,例如:^[0-9 ()+/-]{5,}$
【解决方案4】:

代码除了数字大括号和破折号

function DoValidatePhone() {
    var frm = document.forms['editMemberForm'];                
    var stripped = frm.contact.value;
    var isGoodMatch = stripped.match(/^[0-9\s(-)]*$/);
    if (!isGoodMatch) {
        alert("The Emergency Contact number contains invalid characters." + stripped);
        return false;
    }
}

【讨论】:

    【解决方案5】:

    固定功能:

    function validateForm(thisform) {
            if (validatePhone(thisform.phone,"Invalid phone number")==false) {
                thisform.phone.focus();
                return false;
            }
            return true;
    }
    

    【讨论】:

    • 函数开头忘了加上with(thisform),其实是我写的)
    • 但是你还有额外的“}”符号
    【解决方案6】:

    在输入标签中直接添加你想要的格式的模式。

    <input id="phone" name="phone" pattern="\d{10}" class="text" />
    

    【讨论】:

      【解决方案7】:
      function validate(phoneString){
      
          reg = /^([+|\d])+([\s|\d])+([\d])$/;
      
          return reg.test(phoneString);
      
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-05
        • 2014-11-30
        • 2013-01-01
        • 2011-05-19
        • 2013-08-24
        • 1970-01-01
        相关资源
        最近更新 更多