【发布时间】:2011-10-18 10:37:03
【问题描述】:
我正在尝试验证我的表单。在我的表格中是一个电话号码字段。用户插入电话号码并进行验证以及格式化。我在 StackOverflow 和其他地方的搜索中阅读了很多其他类似的问题,但我被困住了。表单一直说我插入的有效数字无效。
我只关心 NANP 数字,我知道 NANP 数字的格式如下:NXX-NXX-XXXX,其中 N 只能是数字 [2-9],X 可以是 [0-9]。我不需要国家代码。
这是我的代码:
function validatePhone(){
var error = 1;
var hasError = false;
var $this = $(this);
var regex1 = /^(\()?[2-9]{1}\d{2}(\))?(-|\s)?[2-9]{1}\d{2}(-|\s)\d{4}$/;
phone = $(this).val();
phone = phone.replace(/[^0-9]/g,'');
if(!regex1.test(phone)){
hasError = true;
$this.css('background-color','#FFEDEF');
}
else{
area = phone.substring(0,3);
prefix = phone.substring(3,6);
line = phone.substring(6);
$this.val('(' + area + ') ' + prefix + '-' + line);
$this.css('background-color','#FFFFFF');
}
这个想法是,无论我插入 8012559553、(801)2559553、(801)255-9553、801-255-9553 还是类似的东西,它都会被验证并格式化如下:(801) 255-9553 .但同样,出于某种原因,表格继续说我插入的任何数字都是无效的,无论它是否有效。这是我正在使用的代码,但不符合 NANP 格式:
function validatePhone(){
var error = 1;
var hasError = false;
var $this = $(this);
phone = $(this).val();
phone = phone.replace(/[^0-9]/g,'');
if(phone.length != 10){
hasError = true;
$this.css('background-color','#FFEDEF');
}
else{
area = phone.substring(0,3);
prefix = phone.substring(3,6);
line = phone.substring(6);
$this.val('(' + area + ') ' + prefix + '-' + line);
$this.css('background-color','#FFFFFF');
}
所以,我在执行数字的正则表达式测试以确保数字是真实的然后正确格式化数字时遇到了麻烦...有什么想法吗?
【问题讨论】:
-
这是一个很好的链接,当您尝试使其正常工作时:regextester.com
-
你之前的代码怎么不符合NANP格式?它似乎接受任何 10 位数的电话号码,无论他们使用括号、逗号、句点、连字符等,然后将字符串修改为有效的 NANP 格式。
-
@moses 之前的代码允许 1234567890 作为电话号码,根据 NANP 标准,这不起作用。 NXX-NXX-XXXX。 N 不能是数字 0 或 1。希望对您有所帮助。
-
@Michael 是的,我现在明白了。我发布了一个检查 NANP 标准的工作解决方案,并解释了您原始代码中的问题。
标签: jquery validation phone-number