Регулярное выражение - Номер телефона (включая +, (,) и проверка длины - C#
Недавно я придумал регулярное выражение для номера телефона, так как это уже сделали многие разработчики, и я нашел решение, связанное с тем же. И сделал то же самое в производстве.
Версия № 1 только с номерами:
@"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}"
Но тогда есть дополнительное требование: нам нужно разрешить специальные символы, такие как -
а также (
)
Поэтому я изменил регулярное выражение до версии #2, как указано ниже:
@"^([\+]?[0-9]{1}[0-9]{0,2})[\s-]?[\(]?(0?[0-9]\d{0,4}[\)]?[-\s]?)([0-9][\d-\s]{5,7}[\s]?)(x[\d-]{0,4})?$"
Теперь, проверяя длину телефонного номера, QA обнаружил, что он принимает более 16 символов, мне нужно снова поработать над регулярным выражением, чтобы оно заработало.
Вот где я обнаружил проблему, связанную с длиной проверки номера телефона с помощью регулярного выражения.
- Есть ли способ указать, что номер телефона должен принимать минимальную длину как 10 и максимальную длину как 15, изменяя регулярное выражение?
Пример здесь может быть 123456789
- хотите пометить это как неверный номер телефона, так как он имеет только 9 цифр
Пример здесь может быть 1234567890123456
- хотите пометить это как неверный номер телефона, так как он имеет только 16 цифр
- Есть ли способ указать, что одиночная левая скобка и одинарная правая скобка недействительны внутри номера телефона путем изменения регулярного выражения?
Пример здесь может быть 12(34567890
- хотите пометить это как Неверный номер телефона, так как он содержит только круглые скобки
В настоящее время я достиг вышеупомянутых вещей, добавив пользовательские атрибуты в поле номера телефона. Я действительно хочу знать, есть ли способ, которым мы можем достичь выше всего, изменяя само регулярное выражение?
1 ответ
Вы можете использовать регулярное выражение с (?=(?:\D*\d){10,15}\D*$)
положительный взгляд на якорь в начале:
^(?=(?:\D*\d){10,15}\D*$)\+?[0-9]{1,3}[\s-]?(?:\(0?[0-9]{1,5}\)|[0-9]{1,5})[-\s]?[0-9][\d\s-]{5,7}\s?(?:x[\d-]{0,4})?$
Смотрите демо-версию регулярного выражения.
Детали:
^
- начало строки(?=(?:\D*\d){10,15}\D*$)
- положительный прогноз, обеспечивающий от 10 до 15 последовательностей нецифров, за которыми следует 1 цифра, а затем 0+ цифр до конца строки\+?
- необязательный+
условное обозначение[0-9]{1,3}
- от 1 до 3 цифр[\s-]?
- необязательный пробел или-
(?:\(0?[0-9]{1,5}\)|[0-9]{1,5})
- любой из двух вариантов:\(0?[0-9]{1,5}\)
- а(
От 1 до 5 цифр,)
|
- или же[0-9]{1,5}
- от 1 до 5 цифр
[-\s]?
- необязательный пробел или-
[0-9]
- цифра[\d\s-]{5,7}
- от 5 до 7 цифр, пробелов или-
\s?
- необязательный пробел(?:x[\d-]{0,4})?
- необязательная последовательность:x
- буквальныйx
[\d-]{0,4}
- от 0 до 4 цифр-
$
конец строки.