JavaScript 正则表达式用 n 任何字符格式化电话以进行扩展
Posted
技术标签:
【中文标题】JavaScript 正则表达式用 n 任何字符格式化电话以进行扩展【英文标题】:JavaScript Regex to format phone with n any characters for extension 【发布时间】:2016-12-25 18:46:32 【问题描述】:我在 javascript 中有以下函数,它接收美国电话号码的文本,对其进行测试以确保没有输入任何无效内容,然后将其格式化以显示在同一个文本框中。
它运行良好,但它还需要接受电话分机。电话分机基本上需要按原样通过,所以可以是任意数量的任意字符,不管是空格开头、*开头、分机号,随便什么情况。我被要求不要担心所有这些情况,正如我所说,让扩展程序通过。我告诉我的老板,我们可以为扩展设置另一个文本框,但这不是他想要的。
因此,为 n 个任意字符编写正则表达式并不难,我更关心的部分是如何在实际执行电话号码格式化的代码中获取这些字符。
我想我可以只抓取有效电话号码后面的字符,但老实说我不确定如何执行此操作,请记住电话号码经过正则表达式检查,并且输入的长度可能不同。有什么想法吗?
如果有任何帮助,我将不胜感激!这是当前代码,在格式化电话号码时需要调整以接受和返回扩展名,请记住扩展名可以是任意数量的任何字符的要求:
function formatPhone(phoneObj)
var phoneStr = phoneObj.value,
s2 = (""+phoneStr).replace(/\D/g, ''),
m = s2.match(/^(\d3)?[- ]??[\s]?(\d3)?[\s]?(\d4)$/);
phoneObj.value = (!m) ? null : "(" + m[1] + ") " + m[2] + "-" + m[3];
【问题讨论】:
【参考方案1】:首先,您可以将字符串转换为小写或使正则表达式不区分大小写,这样您就不必处理大小写差异。
可能还有其他方法可以解析电话号码,但使用给定的正则表达式,您可以进行如下更改:
^(\d3)?[- ]??[\s]?(\d3)?[\s]?(\d4)(\s+(ext|\*)?\s*\d4)?$
这里我假设ext
或*
前后都有一个空格。希望这能给你一些想法,你可以改进它以满足你的要求。
还要检查这些答案:
A comprehensive regex for phone number validation Parse Phone Number into component parts Validate phone number with JavaScript【讨论】:
感谢您的意见。但这并不能回答我的问题。请重读。如前所述,当电话格式化功能完成时,我需要能够让 n 个任意字符通过扩展名。链接的问题也没有解决这个具体问题。 嗯,你的问题不是很清楚,因为你提到扩展必须以ext
、*
或 space
开头,所以我认为你想要对扩展部分的格式也是如此。很高兴你发现了这一点。
不,没有说明。我说它可以从任何东西开始。再次,重读。谢谢.....【参考方案2】:
我想通了。我认为这比实际上更难。傻我。解决方案:
function formatPhone(phoneObj)
var phoneStr = phoneObj.value,
s2 = (""+phoneStr).replace(/\D/g, ''),
m = s2.match(/^(\d3)?[- ]??[\s]?(\d3)?[\s]?(\d4)?(.*)?$/);
phoneObj.value = (!m) ? null : "(" + m[1] + ") " + m[2] + "-" + m[3]+ "x" + m[4];
【讨论】:
以上是关于JavaScript 正则表达式用 n 任何字符格式化电话以进行扩展的主要内容,如果未能解决你的问题,请参考以下文章
7.4 Javascript:表单验证-揭开正则表达式的面纱