首页 > 解决方案 > 带有可选文本的电话号码正则表达式,在在线工具上运行良好,但在我的代码中却不行

问题描述

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

我的正则表达式代码:用户必须插入电话号码,该号码应该是最少 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})?$

标签: pythonregex

解决方案


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


推荐阅读