Regex电话号码
我试图解决一个问题,我发现最好的解决方案是使用正则表达式。Regex电话号码
我没有先进的正则表达知识,所以我真的需要你的帮助。
的问题是,我需要确定一个字符串是否是电话号码或手机,我们在巴西在这里使用的方式,像这样:
的电话号码可能是这种格式:
0 + XX + XXXXXXXX = 01121234567
或者
XX + XXXXXXXX = 1121234567
或者
XXXXXXXX = 21234567
在这种情况下它的电话号码,所以它需要先从2,3,4或5
而且如果它的手机具有9位数字并且必须以9开头,排他性和第二位数字必须是6,7或8:
0 + XX + 9XXXXXXXX = 011961234567
或者
XX + 9XXXXXXXX = 11971234567
或者
9XXXXXXXX = 981234567
所以,如果我得到字符串“011984160986”,“11984160986”或“984160986”,例如,我需要能够识别它的手机,并且相同的电话号码。
在同一时间,我必须能够检查字符串“84160289”它不是一个有效的电话号码。
任何人都可以用这个正则表达式来解决这个问题吗?
我不喜欢在我的代码中使用大量的“ifs”来验证这一点。
谢谢。
的电话号码的正则表达式是
\b(0?\d\d)?[2345]\d{7}\b
的手机号码的正则表达式是
\b(0?\d\d)?9[678]\d{7}\b
用于在同一时间验证两者的正则表达式是
\b(0?\d\d)?([2345]|9[678])\d{7}\b
\d
助手根据您的语言工作。如果不起作用,请尝试将其替换为[0-9]
。
是的,正则表达式正是我所需要的,除了一件事:我做了一些测试,如果我添加一个大数字,正则表达式做了两个匹配,如https://regex101.com/r/0BI89u/1。 \ d {7}最终并不意味着在此之后它只允许7个字符? –
@RaphaelTelatim哦,对。我已经使用单词边界更新了答案(请参阅[https://regex101.com/r/0BI89u/2](https://regex101.com/r/0BI89u/2))。 – horcrux
坦克很多人! –
当我开始研究正则表达式时,我首先从最简单的方法入手。
注1:我喜欢使用free spacing正则表达式。它有助于提高可读性。
注意2:我没有使用\d
来避免unicode数字可能存在的问题。如果允许unicode数字,则使用\d
。
0 + XX + XXXXXXXX = 01121234567
0 [0-9]{2} [0-9]{8}
XX + XXXXXXXX = 1121234567
[0-9]{2} [0-9]{8}
XXXXXXXX = 21234567
[0-9]{8}
在这种情况下它的电话号码,所以它需要先从2,3,4或5
好了,现在我们有更多的限制。我们开始缩小在这里?
(0 [0-9]{2} [2-5] [0-9]{7} |
[0-9]{2} [2-5] [0-9]{7} |
[2-5] [0-9]{7})
有了这么多共同点,我们可以压缩更多。
(0 [0-9]{2} | [0-9]{2})? [2-5] [0-9]{7}
最后又压缩
(0? [0-9]{2})? [2-5] [0-9]{7}
,如果它的手机也有9位数字,必须与9,独特的开始,第二个数字必须是6,7或8:
0 + XX + 9XXXXXXXX = 011961234567
0 [0-9]{2} 9 [6-8] [0-9]{7}
XX + 9XXXXXXXX = 11971234567
[0-9]{2} 9 [6-8] [0-9]{7}
9XXXXXXXX = 981234567
9 [6-8] [0-9]{7}
结合他们的作品相同
(0? [0-9]{2})? 9 [6-8] [0-9]{7}
条两个手机和地面线路一起
((0? [0-9]{2})? [2-5] [0-9]{7} |
(0? [0-9]{2})? 9 [6-8] [0-9]{7})
这可以压缩到
(0? [0-9]{2})? ([2-5] | 9 [6-8]) [0-9]{7}
要嵌入这种使用word boundaries如果符合您的需求。
\b (0? [0-9]{2})? ([2-5] | 9 [6-8]) [0-9]{7} \b
最终形式与其他答案类似,但我觉得这是值得的工作的整个过程。
你说“第二位必须是6,7或8”,但在手机的例子中,他们不这样做。 – horcrux
我的不好,这是错误的 –
*“我试图解决一个问题,我发现最好的解决方案是使用正则表达式。”* [现在你有两个问题](https://en.wikiquote.org/wiki/Jamie_Zawinski#归因于) –