我的regex代码在在线工具上工作得很好,但是当我插入代码时输入相同,所以给出了错误。
我的regex代码:用户必须插入电话号码,应该是最小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})?$
发布于 2019-02-11 20:48:36
如果唯一有效的条目要么是"N/A“,要么是6到10位数字的字符串,那么为什么不检查一下"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
来删除这些数据,或者显式地告诉用户只输入数字。
发布于 2019-02-11 21:17:04
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")
https://stackoverflow.com/questions/54638631
复制相似问题