在javascript中,我需要一个正则表达式来匹配电话号码中的平衡括号 /^([1]0,1)\s?\(?\d3\)?[-\s]?\d 3[-\s]?\d4$/
Posted
技术标签:
【中文标题】在javascript中,我需要一个正则表达式来匹配电话号码中的平衡括号 /^([1]0,1)\\s?\\(?\\d3\\)?[-\\s]?\\d 3[-\\s]?\\d4$/【英文标题】:In javascript, i need a Regular expression to match balanced parentheses in a phone number /^([1]0,1)\s?\(?\d3\)?[-\s]?\d3[-\s]?\d4$/在javascript中,我需要一个正则表达式来匹配电话号码中的平衡括号 /^([1]0,1)\s?\(?\d3\)?[-\s]?\d 3[-\s]?\d4$/ 【发布时间】:2021-10-27 14:45:14 【问题描述】:电话号码可能有:
一个起始"1"
是可选的
然后是"Space"
,这是可选的
然后是"("
,这是可选的
然后是 3 位数,然后是 ")"
然后
"space"
或 "No space"
或 "-"
再次"("
,这是可选的
然后是 3 位数字,然后是 ")"
然后空格或无空格或"-"
和
然后是"("
,这是可选的
然后是 3 位数字
例如:5555555555
或 555 555 5555
或 555-555-5555
或 (555)-(555)-5555
例如:1 555 555 5555
或 1555 555 5555
或 1555-555-5555
或 1-555-555-5555
或 1 (555) (555) 5555
/^([1]0,1)\s?\(?\d3\)?[-\s]?\d3[-\s]?\d4$/
上述正则表达式在上述所有方面都可以正常工作,但在以下示例中失败,这意味着 如果我只使用了左括号而没有右括号,那么我找不到它还返回true
,这不应该!请帮忙
例如:1 (555-555-5555
例如:555) 555 5555
【问题讨论】:
How do I format my posts using Markdown or html? 如果你解释一下why you want to do this,那真的很有帮助。让用户输入他们想要的电话号码有什么问题?您如何处理 +44 1865 270000 等国际电话号码? 【参考方案1】:正则表达式
/^1?[- ]?(?:(?:\d3|\(\d3\))[- ]?)2\d4$/
完全符合你的例子
现场示例:https://regexr.com/64iu7
【讨论】:
【参考方案2】:让 javascript 根据有效格式列表自动创建一个正则表达式,将处理电话号码的任何格式,只要该号码在有效格式列表中。
上下文和测试平台中的“通过脚本自动创建正则表达式”:
const validFormat = ["5555555555", "555 555 5555", "555-555-5555"
, "(555)-(555)-5555" , "1 555 555 5555", "1555 555 5555"
, "1555-555-5555", "1-555-555-5555", "1 (555) (555) 5555"];
let uniqueListTmp = new Set();
for(const s of validFormat)
let tmp1 = s.replace(/\d/g, "\\d");
let tmp2 = tmp1.replace(/([\(|\)])/g, "\\$1");
uniqueListTmp.add(tmp2);
let regexAsString = "^(";
for(const s of uniqueListTmp)
regexAsString += s + "|";
regexAsString = regexAsString.replace(/\|$/, ")$")
const regex = new RegExp(regexAsString);
const invalidInput = ["555", "5 5 5", "5-5-5"];
const validAndInvalidInput = validFormat.concat(invalidInput);
for(const s of validAndInvalidInput)
console.log(s, ' -> ', regex.test(s));
控制台输出:
5555555555 -> true
555 555 5555 -> true
555-555-5555 -> true
(555)-(555)-5555 -> true
1 555 555 5555 -> true
1555 555 5555 -> true
1555-555-5555 -> true
1-555-555-5555 -> true
1 (555) (555) 5555 -> true
555 -> false
5 5 5 -> false
5-5-5 -> false
【讨论】:
以上是关于在javascript中,我需要一个正则表达式来匹配电话号码中的平衡括号 /^([1]0,1)\s?\(?\d3\)?[-\s]?\d 3[-\s]?\d4$/的主要内容,如果未能解决你的问题,请参考以下文章