Python 带有可选文本的电话号码regex,在在线工具上运行良好,但在我的代码中不可用

Python 带有可选文本的电话号码regex,在在线工具上运行良好,但在我的代码中不可用,python,regex,Python,Regex,我的正则表达式代码在在线工具上运行良好,但在我插入代码时输入相同,因此它的给出错误 我的正则表达式代码: 用户必须插入至少6个号码或最多11个号码的电话号码。 或者,如果他/她没有电话,我将通过我的(前端代码)插入N/A 为什么这个代码不起作用有人请指导我 它是非常基本的正则表达式。 我试图通过其他方式达到同样的效果,比如: ^([0-9]{6,11})?([a-zA-Z/]{3})?$ 如果唯一有效的条目是“N/A”或六到十位数的字符串,那么为什么不检查“N/A”的特殊情况,而不是尝试将其包

我的正则表达式代码在在线工具上运行良好,但在我插入代码时输入相同,因此它的给出错误

我的正则表达式代码: 用户必须插入至少6个号码或最多11个号码的电话号码。 或者,如果他/她没有电话,我将通过我的(前端代码)插入N/A

为什么这个代码不起作用有人请指导我 它是非常基本的正则表达式。 我试图通过其他方式达到同样的效果,比如:

^([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".')

此外,如果输入的电话号码包含空格、括号、连字符或加号,该怎么办?您可能希望使用
re.sub
删除这些内容,或者明确告诉用户只输入数字。

如果唯一有效的条目是“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
将其删除,或者明确告诉用户只输入数字。

返回
匹配对象
,因此此部分
电话==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")
重新导入
尽管如此:
电话=输入(“输入电话:”)
如果(phone.isdigit()和5
返回一个
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")
重新导入
尽管如此:
电话=输入(“输入电话:”)
如果(phone.isdigit()和5
你有什么输入?04131119728或021345尝试
如果电话:
@Thefourthbird是的,可以,但如果有人没有电话,我想输入N/A.值also@Thefourthbird我已经验证了6个以上的输入所有其他工作正常,也不适用,但只有这一个不工作,你有什么输入有?04131119728或021345如果电话,请尝试
如果电话:
@Thefourthbird是的,可以,但我想如果有人没有电话,那么我想输入N/A.值also@Thefourthbird我已经验证了6个以上的输入,所有其他工作正常,也不适用,但只有这一个不适用于itM,你能告诉我为什么这个正则表达式不工作吗请电子邮件地址^[a-zA-Z0-9]{2,20}@[a-zA-Z0-9]{2,20}\.[a-zA-Z0-9]{2,20}(\.[a-zA-Z0-9]{2,20})$例如:abc@abc.com或abc@abc.com.euAs对于电子邮件地址的regexp,可能应该单独发布,而不是在回答类似于此问题的其他问题的注释中回答。不管怎样,“
[a-zA-Z0-9]{2,20}-[a-zA-Z0-9]{2,20}-[a-zA-Z0-9]{2,20}(\.[a-zA-Z0-9]{2,20}”)
对于我检查单个电子邮件地址字符串来说效果很好。请告诉我为什么这个正则表达式不起作用。电子邮件地址^[a-zA-Z0-9]{2,20}@[a-zA-Z0-9]{2,20}\.[a-zA-Z0-9]{2,20}(\.[a-zA-Z0-9]{2,20})$例如:abc@abc.com或abc@abc.com.euAs对于电子邮件地址的regexp,可能应该单独发布,而不是在回答类似于此问题的其他问题的注释中回答。不管怎样,“
[a-zA-Z0-9]{2,20}-[a-zA-Z0-9]{2,20}-[a-zA-Z0-9]{2,20}(\.[a-zA-Z0-9]{2,20}”)
对于我检查单个电子邮件地址字符串来说效果很好。你能告诉我为什么这个正则表达式不起作用吗。电子邮件地址^[a-zA-Z0-9]{2,20}@[a-zA-Z0-9]{2,20}\.[a-zA-Z0-9]{2,20}(\.[a-zA-Z0-9]{2,20})$例如:abc@abc.com或abc@abc.com.eu-凯瑟琳刚才在编辑Delete@Cathrine它确实匹配,您可以使最后一个组也不捕获
(?:
)。请告诉我为什么这个正则表达式不工作。电子邮件地址。^[a-zA-Z0-9]{2,20}@[a-zA-Z0-9]{2,20}.[a-zA-Z0-9]{2,20}(\.[a-zA-Z0-9]{2,20})?$例如:abc@abc.com或abc@abc.com.eu-凯瑟琳刚才在编辑Delete@Cathrine它确实匹配,并且您可以使最后一个组不捕获
(?:
)。