2016-12-25 28 views
0

我在JavaScript中有以下功能,它需要在美国的电话号码的文本,测试它,以确保没有无效输入,然后格式化它显示在相同的文本框。JavaScript的正则表达式来格式化电话与任何字符扩展

它运行良好,但它也需要接受电话分机。电话分机基本上需要按原样通过,因此它可以是任意数量的任何字符,无论它是以空格,a *,ext开头。我被要求不要担心所有这些情况,正如我所说的那样,让扩展程序刚刚通过。我告诉我的老板,我们可以为扩展名添加另一个文本框,但这不是他想要的。

因此,编写n个任意字符的正则表达式并不困难,我更关心的部分是如何在实际执行电话号码格式的代码中获取这些字符。

我想我可以在有效的电话号码后面抓住字符,但我老实说不知道如何做到这一点,请记住,电话号码是正确的检查,输入可能有不同的长度。有什么想法吗?

我将不胜感激任何帮助!下面是当前的代码,这需要调整接受和返回时,它格式化电话号码的分机,牢记扩展可以是任意数量的任意字符的要求:

function formatPhone(phoneObj) { 
var phoneStr = phoneObj.value, 
    s2 = (""+phoneStr).replace(/\D/g, ''), 
    m = s2.match(/^(\d{3})?[- ]??[\s]?(\d{3})?[\s]?(\d{4})$/); 
    phoneObj.value = (!m) ? null : "(" + m[1] + ") " + m[2] + "-" + m[3]; 
} 

回答

0

首先你可以将字符串转换为小写,或者让你对正则表达式不区分大小写,这样你就不必处理大小写差异了。

可能有其他的方法来解析的电话号码,但给定的正则表达式,你可以做这样一个变化:

^(\d{3})?[- ]??[\s]?(\d{3})?[\s]?(\d{4})(\s+(ext|\*)?\s*\d{4})?$ 

在这里,我认为之前和ext*后有一个空间。希望这可以给你提供想法,你可以改进它以符合你的要求。

还要检查这些问题的答案:

+0

感谢您的意见。这虽然没有回答我的问题。请重新阅读。如上所述,当电话格式化功能完成时,我需要能够让n个任意字符通过扩展。相关问题也没有解决这个具体问题。 –

+0

那么你的问题并没有太大的关注,因为你提到扩展名必须以'ext','*'或'space'开头,所以我想你也需要对扩展部分的格式进行某种验证。很高兴你知道了。 –

+0

不,没有说明。我表示可以从任何事情开始。再次重读。谢谢..... –

0

我想通了。我认为这比实际更困难。傻我。解决方案:

function formatPhone(phoneObj){ 
    var phoneStr = phoneObj.value, 
    s2 = (""+phoneStr).replace(/\D/g, ''), 
    m = s2.match(/^(\d{3})?[- ]??[\s]?(\d{3})?[\s]?(\d{4})?(.*)?$/); 
    phoneObj.value = (!m) ? null : "(" + m[1] + ") " + m[2] + "-" + m[3]+ "x" + m[4]; 
} 
相关问题