【问题标题】:Validate (Australian) Phone Numbers in Javascript在 Javascript 中验证(澳大利亚)电话号码
【发布时间】:2013-03-13 19:31:25
【问题描述】:

我需要在 JavaScript 中验证澳大利亚的电话号码(例如 02[3-9]\d{7}07[3-9]\d{7}04[\d]{8})。

要求:

  • 必须是 10 位数字
  • 没有逗号
  • 没有破折号
  • 前面没有+
  • 必须以 0 开头

目前我可以验证必填字段和电子邮件地址,但我想添加电话号码验证。

<html>
<head>

<script type="text/javascript">
function validateForm() {
 var x=document.forms["form3"]["name"].value;
 if (x==null || x=="") {
   alert("Name must be filled out");
   return false;
 }
 var s=document.forms["form3"]["phone"].value;
 if (s==null || s=="") {
   alert("Please Enter your Phone or Mobile Number - Preferably Phone Number");
   return false;
 }
 var s=document.forms["form3"]["email"].value;
 if (s==null || s=="") {
   alert("Please Enter a valid email address");
   return false;
 }
 var k=document.forms["form3"]["email"].value;
 var atpos=k.indexOf("@");
 var dotpos=k.lastIndexOf(".");
 if (atpos<1 || dotpos<atpos+2 || dotpos+2>=k.length) {
   alert("Email Address is Not Valid. Please provide your correct email address.");
   return false;
 }
}
</script>
</head> 
<body>

<form action="/thank-you.php" name="form3" method="post" onsubmit="return validateForm();" >
Your name* <input type="text" name="name" />    
Phone number* <input type="text" name="phone" />
Email* <input type="text" name="email" />
<input type="submit" value="sumbit" name="submit" class="button" onclick="javascript:return validateMyForm();" /><input type="reset" value="Reset" class="resetbutton" />
</form>

</body> 
</html>

有人可以帮忙吗?

【问题讨论】:

  • 请注意,您不能依赖客户端数据(甚至不能依赖客户端验证数据)
  • @kaᵠ 最好有客户端验证和服务器端验证,因为如果客户端验证失败,它就不会提交,这可能会节省一些 HTTP 请求。
  • @EnglishMaster 并改善用户体验,因为(真正的)用户更愿意立即知道任何错误,而不是在网站花时间处理页面并返回结果之后。

标签: javascript regex forms validation


【解决方案1】:

这是我推荐的正则表达式

var pattern = /^0[0-8]\d{8}$/g;

所以输入必须以 0 开头,后跟一个数字,并且必须是 0-8 之间的一个。那么它必须还有 8 位数字。

有效的电话号码示例:

0010293999(正常)

0110293999(好的)

0210293999(好的)

0910293999(不)

//实现

 ........
 var phoneNumber =document.forms["form3"]["phone"].value;
 var phonePattern = /^0[0-8]\d{8}$/g;
 //phone number is not valid. Please notice that you don't need to check if it's empty or null since Regex checks it for you anyways
 if (!phoneNumber.test(phonePattern))
   {
   alert("Please Enter your Phone or Mobile Number - Preferably Phone Number");
   return false;
   }
 ..........

---- 编辑

........
     var phoneNumber =document.forms["form3"]["phone"].value;
     var phonePattern = /^0[0-8]\d{8}$/g;
     //phone number is not valid. Please notice that you don't need to check if it's empty or null since Regex checks it for you anyways
     if (!phonePattern.test(phoneNumber))
       {
       alert("Please Enter your Phone or Mobile Number - Preferably Phone Number");
       return false;
       }
     ..........

【讨论】:

  • 不工作。刚刚添加了您的代码,但它发送网络消息而不验证所有字段。
  • 我以为你在问电话号码的正则表达式?
  • 很抱歉,示例代码中有一个小错误。它必须是 !phonePattern.test(phoneNumber) 而不是 !phoneNumber.test(phonePattern)
  • 现在一切都好。多谢了。抱歉,我还没有 15 声望,所以我无法投票给你。我将来会做的。再次感谢。
  • 根据 OP 问题,某些提供的模式与澳大利亚电话号码不匹配。例如,从 05 开始的数字对澳大利亚无效。 australia.gov.au/about-australia/facts-and-figures/…
【解决方案2】:

感谢Paul Ferrett 对此(php 不是 js,但正则表达式应该翻译):

<?php
function validate_phone($number) {
  $number = preg_replace('/[^\d]/', '', $number);
  return preg_match('/^(0(2|3|4|7|8))?\d{8}$/', $number)
    || preg_match('/^1(3|8)00\d{6}$/', $number)
    || preg_match('/^13\d{4}$/', $number);
}

注意:“MIT 许可证”

【讨论】:

    【解决方案3】:

    看看 Javascript RegExp Object 和 RegExp test() 方法。

    var patt = /04[\d]{8}/g; // Shorthand for RegExp object
    
    var phoneNumber1 = '0412345678';
    var result1 = patt.test(phoneNumber1); // result1 is true
    
    var phoneNumber2 = 'abc';
    var result2 = patt.test(phoneNumber2); // result2 is false
    

    【讨论】:

      【解决方案4】:

      您也可以使用所需的模式。

      我以前从未使用过它,但它看起来像这样:

      <input type="text" 
        id="phoneNumber"
        title="Phone numbers must be 10 digits and start with 0." 
        required pattern="0[::digit::]{10}"
      />
      
      // It's late, no idea if that's a valid regex or if works with POSIX.
      

      有关更多信息,请参阅此 html5rocks 文章: http://www.html5rocks.com/en/tutorials/forms/html5forms/#toc-validation

      【讨论】:

      • 谢谢。这个工作就像一个魅力。问题是电话字段的错误消息与其他 JavaScript 错误消息不同...
      • 再想一想,这个在通过 IE 浏览器填写表单时不起作用。
      • required pattern= 没有什么特别之处。这只是两个属性,pattern=required
      猜你喜欢
      • 2015-06-04
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多