我想在Javascript中重新格式化(替换而不是验证-有许多验证参考)电话号码以供显示。以下是一些数据示例:
- 123 4567890
- (123) 456-7890
- (123)456-7890
- 123 456 7890
- 123.456.7890
- (空/无效)
- 1234567890
是否有一种简单的方法使用正则表达式来完成这个任务?我正在寻找最佳方法。是否有更好的方法?
我想将号码重新格式化为:(123) 456-7890
我想在Javascript中重新格式化(替换而不是验证-有许多验证参考)电话号码以供显示。以下是一些数据示例:
是否有一种简单的方法使用正则表达式来完成这个任务?我正在寻找最佳方法。是否有更好的方法?
我想将号码重新格式化为:(123) 456-7890
对于所有国际电话号码,其国家代码最多为3位数,我们可以将原始答案稍作更改,如下所示。 对于第一个匹配项,我们应该查找1-3位数字,而不是仅查找'1'。
export const formatPhoneNumber = (phoneNumberString) => {
var cleaned = ('' + phoneNumberString).replace(/\D/g, '');
var match = cleaned.match(/^(\d{1,3}|)?(\d{3})(\d{3})(\d{4})$/);
if (match) {
var intlCode = (match[1] ? `+${match[1]} ` : '');
return [intlCode, '(', match[2], ') ', match[3], '-', match[4]].join('');
}
return null;
}
console.log( formatPhoneNumber('16464765278') )//+1 (646) 476-5278
console.log( formatPhoneNumber('+2549114765278')) //+254 (911) 476-5278
console.log( formatPhoneNumber('929876543210') )//+92 (987) 654-3210
var numbers = "(123) 456-7890".replace(/[^\d]/g, ""); //This strips all characters that aren't digits
if (numbers.length != 10) //wrong format
//handle error
var phone = "(" + numbers.substr(0, 3) + ") " + numbers.substr(3, 3) + "-" + numbers.substr(6); //Create format with substrings
这是一个可以接受电话号码和带分机号码的输入框。
function phoneNumber(tel) {
var toString = String(tel),
phoneNumber = toString.replace(/[^0-9]/g, ""),
countArrayStr = phoneNumber.split(""),
numberVar = countArrayStr.length,
closeStr = countArrayStr.join("");
if (numberVar == 10) {
var phone = closeStr.replace(/(\d{3})(\d{3})(\d{4})/, "$1.$2.$3"); // Change number symbols here for numbers 10 digits in length. Just change the periods to what ever is needed.
} else if (numberVar > 10) {
var howMany = closeStr.length,
subtract = (10 - howMany),
phoneBeginning = closeStr.slice(0, subtract),
phoneExtention = closeStr.slice(subtract),
disX = "x", // Change the extension symbol here
phoneBeginningReplace = phoneBeginning.replace(/(\d{3})(\d{3})(\d{4})/, "$1.$2.$3"), // Change number symbols here for numbers greater than 10 digits in length. Just change the periods and to what ever is needed.
array = [phoneBeginningReplace, disX, phoneExtention],
afterarray = array.splice(1, 0, " "),
phone = array.join("");
} else {
var phone = "invalid number US number";
}
return phone;
}
phoneNumber("1234567891"); // Your phone number here
const formatUSAndInternationalNumber = (phone) => phone
.replace(/\D/g, '')
.replace(/(\d*)(\d{3})(\d{3})(\d{4})$/, (s, a, b, c, d) => `+${a} (${b}) ${c}-${d}`)
.replace(/\+(1\b|\s)\s*/, '');
美国电话号码通过删除前缀+1
变为国内号码。
例如:
formatUSAndInternationalNumber('1231231234')
-> '(123) 123-1234'
formatUSAndInternationalNumber('11231231234')
-> '(123) 123-1234'
formatUSAndInternationalNumber('491231231234')
-> '+49 (123) 123-1234'
我在寻找一些我可以在具有PCRE Regex功能的文本清理器应用程序中使用的东西时遇到了这篇文章(但没有Java函数)。我会在这里发布这个解决方案,供那些需要一个简单的纯Regex解决方案的人使用,它可以在各种文本编辑器、清理器、扩展器甚至一些剪贴板管理器中工作。我个人使用Sublime和TextSoap。这个解决方案是为Text Soap制作的,因为它位于菜单栏中,并提供一个下拉菜单,您可以在其中触发对光标所选内容或剪贴板中的文本进行操作的文本操作。
我的方法基本上是两个替换/搜索和替换正则表达式。每个替换搜索和替换都涉及两个正则表达式,一个用于搜索,一个用于替换。
替换/搜索和替换#1
第一个替换/搜索正则表达式:\D
第一个替换/替换正则表达式:""(无,甚至没有空格)
替换/搜索和替换#2
操作的第二个替换/搜索和替换部分捕获区号的组$1
,捕获第二组三个数字的组$2
,最后一个捕获组捕获最后一组四个数字$3
。该操作的正则表达式替换部分在这些数字的捕获组之间插入了美国电话号码格式。(\d{3})(\d{3})(\d{4})
第二个替换/替换正则表达式: \($1\) $2\-$3
反斜杠\
用于转义特殊字符(
、)
、
(表示空格)和-
,因为我们将它们插入到捕获组$1
、$2
和$3
中的数字之间,以便用于美国电话号码格式化。
在TextSoap中,我创建了一个包括两个替换操作动作的自定义清理器,因此实际上感觉与执行脚本完全相同。我相信这个解决方案可以改进,但我预计复杂度会大大提高。如果有人想要增加这个解决方案作为学习经验,欢迎提交改进版本。
美国电话号码
/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/
让我们将这个正则表达式分成较小的片段,以便更容易理解。
/^\(?
: 表示电话号码可以以可选的 (
开头。(\d{3})
: 在可选的 (
后面必须有 3 个数字。如果电话号码没有 (
,则必须以 3 个数字开头。例如:(308
或 308
。\)?
: 表示第一个 3 位数字后面可以有一个可选的 )
。[- ]?
: 接下来,电话号码可以在第一个 )
(如果存在)或第一个 3 位数字后面加上可选的连字符(-
)。(\d{3})
: 然后必须有另外 3 个数字。例如:(308)-135
或 308-135
或 308135
[- ]?
: 第二组 3 位数字后,电话号码可以再次添加可选的连字符(-
)。例如:(308)-135-
或 308-135-
或 308135-
(\d{4})$/
: 最后,电话号码必须以四个数字结尾。例如:(308)-135-7895
或 308-135-7895
或 308135-7895
或 3081357895
。
参考:
let formatPhone = (dirtyNumber) => {
return dirtyNumber.replace(/\D+/g, '').replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
}
let isPhone = (phone) => {
//normalize string and remove all unnecessary characters
phone = phone.replace(/\D+/g, '');
return phone.length == 10? true : false;
}