我的正则表达式代码可以在在线工具上正常工作,但是在我插入代码时输入相同,因此出现错误
我的正则表达式代码: 用户必须输入电话号码,最少6个数字或最多11个数字。 或者如果他/她没有电话,那么我将通过我的(前端代码)N / A插入。
import re
while True:
phone=input("Enter Telephone:")
phone_r = re.match('^([a-zA-Z/]{3})$|^([0-9]{6,11})$',phone)
if phone_r == True or phone =='N/A':
break
else:
print("Wrong Value Entered. Please Enter Correct Telephone Number")
为什么此代码无法正常工作,请指导我 它非常基本的正则表达式。 我尝试使用其他方式来达到相同的结果:
^([0-9]{6,11})?([a-zA-Z/]{3})?$
答案 0 :(得分:2)
如果唯一有效的输入项是“ N / A”或六到十位数字的字符串,那么为什么不只检查“ N / A”的特殊情况,而不是尝试将其包含在正则表达式中?如果您允许“ ([a-zA-Z/]{3})
”为有效匹配项,则用户可以输入“ abc”之类的内容,并且仍会被接受。您可以编写正则表达式来严格查找确切的字符串“ N / A”或有效数字,但是更简单的检查也可以:
import re
while True:
phone = input("Enter the telephone number: ")
phone_r = re.match('^\d{6,11}$', phone)
if phone_r or phone.upper() == 'N/A':
break
else:
print('Please enter a valid telephone number or "N/A".')
如果输入的电话号码包含空格,括号,连字符或加号怎么办?您可能想使用re.sub
删除这些字符,或者明确告诉用户仅输入数字。
答案 1 :(得分:2)
re.match返回MatchObject
或None
,因此phone_r == True
这部分不会通过。
尽管您的模式可以使用if phone_r
来工作,但[a-zA-Z/]{3}
将匹配的一个变体可能是N / A。也可能是AAA,因为字符类与列出的任何字符都匹配。
您可以改用正则表达式只匹配6到11位数字,或者另一种匹配N / A或6到11位数字的方法是:
import re
while True:
phone = input("Enter Telephone:")
if (phone.isdigit() and 5 < len(phone) < 12) or phone == 'N/A':
break
else:
print("Wrong Value Entered. Please Enter Correct Telephone Number")