使用Javascript验证(澳大利亚)电话号码

3

我需要在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>

请问有人可以帮忙吗?


1
请注意,您不能依赖客户端数据(即使是经过客户端验证的数据)。 - undefined
2
@kaᵠ 最好同时进行客户端验证和服务器端验证,因为如果客户端验证失败,它就不会提交,这样可以节省一些HTTP请求。 - undefined
1
@EnglishMaster 并且改善用户体验,因为(真实的)用户更愿意立即知道任何错误,而不是在网站花费时间处理页面并返回结果之后。 - user216084
5个回答

11

这里是一个我建议使用的正则表达式

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

---- Edit

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

哎呀,不行啊。我刚刚加了你的代码,但它发送网页消息时没有验证所有字段。 - undefined
我以为你在问关于电话号码的正则表达式? - undefined
2
很抱歉,示例代码中有一个小错误。应该是!phonePattern.test(phoneNumber),而不是!phoneNumber.test(phonePattern)。 - undefined
1
一切都好了。非常感谢。很抱歉,我还没有足够的声望来给你点赞。将来我一定会这样做的。再次感谢。 - undefined
1
根据OP的问题,提供的一些模式可能无法匹配澳大利亚的电话号码。例如,以05开头的号码在澳大利亚是无效的。请参考http://www.australia.gov.au/about-australia/facts-and-figures/telephone-country-and-area-codes。 - undefined
显示剩余2条评论

4
感谢 Paul Ferrett 提供的内容(这是针对 PHP 而不是 JavaScript,但正则表达式应该可以通用):
<?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许可证”


1

这里是一个更强大的澳大利亚电话号码正则表达式。感谢this SO问题。

let phonePattern = /^(?:\+?(61))? ?(?:\((?=.*\)))?(0?[2-57-8])\)? ?(\d\d(?:[- ](?=\d{3})|(?!\d\d[- ]?\d[- ]))\d\d[- ]?\d[- ]?\d{3})$/

测试:

0412123123      TRUE
0491579999      TRUE
0491572983      TRUE
0712122123      TRUE
0212122123      TRUE
0000000000      FALSE
5555551234      FALSE
04121231231     FALSE
041212312       FALSE

0
看一下Javascript的RegExp对象和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

0
你还可以使用所需的模式。
我以前从未使用过,但它看起来像这样:
<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错误消息不同... - undefined
这个不行,当通过IE浏览器填写表单时无法工作。 - undefined
1
required pattern=没有什么特别之处。这只是两个属性,pattern=required - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接