首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用可选文本的电话号码regex,在在线工具上可以很好地工作,但不在我的代码中。

使用可选文本的电话号码regex,在在线工具上可以很好地工作,但不在我的代码中。
EN

Stack Overflow用户
提问于 2019-02-11 20:29:36
回答 2查看 74关注 0票数 0

我的regex代码在在线工具上工作得很好,但是当我插入代码时输入相同,所以给出了错误。

我的regex代码:用户必须插入电话号码,应该是最小6个号码或最多11个号码。或者,如果他/她没有电话,我将插入我的(前端代码) N/A。

代码语言:javascript
运行
复制
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")

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

代码语言:javascript
运行
复制
^([0-9]{6,11})?([a-zA-Z/]{3})?$
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-11 20:48:36

如果唯一有效的条目要么是"N/A“,要么是6到10位数字的字符串,那么为什么不检查一下"N/A”的特殊情况,而不是尝试将它包含在正则表达式中呢?如果您允许"([a-zA-Z/]{3})“是一个有效的匹配,那么用户可以键入类似于"abc”的内容,它仍然会被接受。您可以编写一个正则表达式来严格地查找确切的字符串"N/A“或有效的数字,但是简单的检查也同样有效:

代码语言:javascript
运行
复制
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来删除这些数据,或者显式地告诉用户只输入数字。

票数 2
EN

Stack Overflow用户

发布于 2019-02-11 21:17:04

re.match返回一个MatchObjectNone,因此这个部分phone_r == True不会通过。

虽然您的模式可能使用if phone_r,但[a-zA-Z/]{3}将匹配的一个变体可能是N/A。它也可能是AAA,因为字符类匹配任何列出的字符。

您可以使用正则表达式只匹配6-11位数字,或者另一种匹配N/A或6-11位数字的方法是:

代码语言:javascript
运行
复制
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")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54638631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档