我正在尝试创建一个正则表达式来查找文本中的电话号码。电话号码的格式是未知的,这是一个相当复杂的主题,所以我试图保持它尽可能简单,只是找到可能的电话号码(我可以检查他们以后,例如,libphoneber-js)。
这就是我目前所拥有的:
/\+?[\d(][\d()\- ]{3,}\d/g
此正则表达式查找满足以下条件的电话号码:
1.它可以有“+”或没有
1.然后会有一个数字或左括号
1.然后只是字符范围(数字,括号,破折号或空格,至少3个)
1.会得到一个数字
但我的正则表达式在以下情况下失败:
- “+(651)-234-2345(332)-445-12345”,所以在这里我们看到,用户未能正确格式化电话号码,忘记添加“+",因为括号可以重复多次,因为他们想要的,我捕捉它作为一个长号码
- “+(651)-234-2345(332)-445-12345”和以前一样,但现在用户甚至忘记了添加空间
**有没有一种方法可以说,括号只能打开和关闭一次,或者类似的东西?**我的意思是它们可以出现在数字的任何地方,不仅在开始时,而且只出现一次。
我在这里有一个Playground:https://regexr.com/7lgni正如您所看到的,大多数电话号码都按预期突出显示。
2条答案
按热度按时间yhxst69z1#
不要把
()
和数字混在一起。只需匹配一个以(
开始,以)
结束的可选序列,中间有数字。然后匹配之后的数字、破折号和空格的组合。DEMO
0pizxfdo2#
考虑到单个可选括号对的宽松要求,
破折号后无数字。
https://regex101.com/r/t4h94x/1