我正在尝试调整匹配电话号码,并提出了以下代码:
pattern = re.compile("^(1?[2-9]\d{2}([.\-\s])?\d{3}\2\d{4}){1}$")
if pattern.match(phoneNumber):
return True这应该与数字相匹配,例如:
12142142141
1214-444-4444
214.333.3333
但是,这与上述任何一个示例都不匹配。我已经在几个不同的regex验证器上测试了这一点,它们都是成功的。我假设python引擎是不同的,但是在搜索之后我找不到不同之处。有什么建议吗?
发布于 2017-04-20 01:51:47
按照您的代码,做几个小更改:
import re as re
def test(s):
pattern = re.compile("^1?[2-9]\d{2}([.\-\s])?\d{3}\\1?\d{4}$")
return pattern.match(s) is not None
print(test("12142142141")) #True
print(test("1214-444-4444")) #True
print(test("214.333.3333")) #True
print(test("214-333-3333")) #True
print(test("214.333-3333")) #False三个测试用例都通过了。
发布于 2017-04-20 01:49:35
试试这个正则表达式:
^1?(?:(?:\d{10})|(?:\d{3}-\d{3}-\d{4})|(?:\d{3}\.\d{3}\.\d{4}))$很可能您不希望允许混合分隔符类型,例如,如果一个数字没有使用分隔符,那么它必须在任何地方都不使用分隔符(对于点和连字符也是如此)。在这种情况下,我们可以使用交替来涵盖这三种类型的模式。
演示这里:
https://stackoverflow.com/questions/43508796
复制相似问题