Регулярный номер телефона с необязательным текстом, отлично работает на онлайн-инструментах, но не в моем коде - PullRequest
0 голосов
/ 11 февраля 2019

Мой код регулярного выражения работает нормально на онлайн-инструментах, но при вводе в мой код используется тот же самый ввод, поэтому он дает ошибку

мой код регулярного выражения: пользователь должен ввести номер телефона, который должен быть минимум 6 цифр или максимум 11номера.или если у него / нее нет телефона, то я буду вводить через мой (код переднего конца) н / д.

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})?$

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

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")
0 голосов
/ 11 февраля 2019

Если единственными допустимыми записями являются «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, чтобы убрать их, или явно указать пользователю вводить только цифры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...