python - 带有可选文本的电话号码正则表达式,在在线工具上运行良好,但在我的代码中却不行
问题描述
我的正则表达式代码在在线工具上运行良好,但在我插入代码时输入相同,因此它给出错误
我的正则表达式代码:用户必须插入电话号码,该号码应该是最少 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})?$
解决方案
如果唯一有效的条目是“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".')
此外,如果输入的电话号码包含空格、括号、连字符或加号怎么办?您可能想使用 are.sub
将这些去掉,或者明确告诉用户只输入数字。