我正在使用javascript和/或jQuery中的加拿大电话号码的正则表达式。在通过我的主要正则表达式后,我在格式化方面遇到了一些麻烦。
主要是,当用户离开输入栏时,我需要以这种方式格式化电话号码:
如上所示,我希望能够同时格式化普通电话号码和免费电话号码。
代码
在我的HTML中,我做了一个简单的输入字段。
<input id="assure_telephone" placeholder="Phone number" name="assure_telephone" maxlength="25" type="text" />
对于我的jQuery,我选择了我的大文件中的代码并简化了一下。我们需要关注我的正则表达式。
$('#assure_telephone').bind('change', function(){
// Delete all caracters and specials caraters except numbers
telephone_user = $('#assure_telephone').val().replace(/[^0-9]/g, '');
// Format the new phone number
telephone_user_regex = telephone_user.replace(/(\d{3})(\d{3})(\d{4})(\d{0,5})/, "$1-$2-$3 #$4");
$('#assure_telephone').val(telephone_user_regex);
});
我的代码背后的逻辑
正如您所看到的,我首先删除所有特殊字符以仅保留数字,然后在我使用.replace()Javscript函数应用格式化之后。
链接到我的实际演示:http://jsfiddle.net/y201gcdg/6/
正如您所看到的,很明显,免费电话无法正常工作,因为我的格式化工作是针对普通电话号码而非免费的。
我的问题是:有没有办法用我的 telephone_user_regex 变量的长度工作来检测它是免费的还是没有 OR 有什么办法用更好的正则表达式来实现它?
或者,我在Stackoverflow上创建了这个可能有帮助的内容:https://code.google.com/p/libphonenumber/(来源:Phone number format in Javascript)
其他资源:http://www.w3schools.com/jsref/jsref_replace.asp
编辑#1 - 在没有用的答案后将其删除。
编辑#2 - 可能的答案:计算字符数 资料来源:A comprehensive regex for phone number validation
我可以从我的第一个replace()函数开始,然后计算caracter的数量,如果它超过X数,则应用格式化,否则执行另一个。
编辑#3 - 由于我不想回答我自己的问题,我会在这里发布我的工作。
var typephone = type;
// We take out all caracters except 0 to 9
var telephone_user = $('#'+typephone).val().replace(/[^0-9]/g, '');
// Now I can make switch case to detect the kind of phone number I need to format
switch(telephone_user.length) {
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
case 6 :
case 7 :
case 8 :
case 9 :
console.log('Your phone number is too small');
break;
case 10 :
console.log('This is a phone number 111-222-3333');
break;
}
通过这种方式,我能够检测到长度,并且我能够知道它是免费电话号码还是普通电话号码。如果客户写下这样的话,我可能会遇到麻烦:111-222-3333#44444。删除特殊字符后,我将无法知道它是否是扩展名。
答案 0 :(得分:0)
这是我的建议:
replace(/[^0-9#]/g, '')
),否则您无法检测第11个字符是国家/地区代码还是扩展名。telephone_user.search("#")