WedX - журнал о программировании и компьютерных науках

Простое регулярное выражение номера телефона для соответствия числам, пробелам и т. д.

Я пытаюсь изменить довольно простой шаблон регулярного выражения на С#, который проверяет телефонные номера.

Узоры -

[0-9]+(\.[0-9][0-9]?)?

У меня два вопроса -

1) Существующее выражение работает (хотя и довольно ограничительно), но я не совсем понимаю, как оно работает. Регулярные выражения для похожих проблем больше похожи на это -

/^[0-9()]+$/

2) Как я могу расширить этот шаблон, чтобы разрешить скобки, точки и один пробел для разделения чисел. Я попробовал несколько вариантов, чтобы включить -

[0-9().+\s?](\.[0-9][0-9]?)?

Хотя я не могу создать правильный шаблон.

Любая помощь приветствуется.

Спасибо,

01.02.2018

  • Взгляните на этот ответ. Это может помочь. stackoverflow.com/questions/27701747/ 01.02.2018
  • Изучите шаблон на regex101.com. 01.02.2018
  • Ваше требование скобок для разделения числа не имеет для меня смысла. Пожалуйста, покажите нам некоторые данные. 01.02.2018
  • Привет Тим, это, вероятно, просто ошибка в том, как я предоставил регулярные выражения выше, но примерный номер телефона может быть - +44 (0) 20 2836 5018 01.02.2018

Ответы:


1
[0-9]+(\.[0-9][0-9]?)?

Прежде всего, я рекомендую проверить либо regexr.com, либо regex101.com, чтобы вы сами поняли, как работает регулярное выражение. Оба веб-сайта дадут вам пошаговое объяснение того, что делает каждый символ в регулярном выражении.

Теперь одна из основных вещей, которую вы должны понять, это то, что регулярное выражение имеет специальные символы. Это включает, среди прочего, следующее: []().-+*?\^$. Итак, если вы хотите, чтобы ваше регулярное выражение соответствовало, например, буквальному ., вам придется его экранировать, поскольку это специальный символ. Для этого используйте либо \., либо [.]. Обратная косая черта служит для экранирования других символов, а [] означает «соответствует любому из символов в этом наборе». Некоторые специальные символы не имеют специального значения внутри этих скобок и не требуют экранирования.

Следовательно, приведенное выше регулярное выражение будет соответствовать любой комбинации цифр длиной 1 или более, за которыми следует необязательный суффикс (foobar)?, который должен быть точкой, за которой следует одна или две цифры. На самом деле, это регулярное выражение больше похоже на то, что оно должно сопоставлять десятичные числа с двумя цифрами после точки, а не телефонные номера.

/^[0-9()]+$/

То, что это делает, довольно просто - соответствует любой комбинации цифр или круглых скобок, которая имеет длину 1 или больше.

[0-9().+\s?](\.[0-9][0-9]?)?

То, что вы сопоставляете здесь, это:

  • одно из: цифра, круглая скобка, точка, плюс, пробел или вопросительный знак; но ровно один раз только!
  • необязательно, за которым следует точка и одна или две цифры

Подходящим регулярным выражением для вашей цели может быть:

(\+\d{2})?((\(0\)\d{2,3})|\d{2,3})?\d+

Введите это на одном из упомянутых выше веб-сайтов, чтобы понять, как это работает. Я немного изменил его, чтобы также разрешить, например, +49 123 4567890. Кроме того, для простоты я не включил пробелы, поэтому при использовании этого регулярного выражения вы должны сначала удалить все пробелы в своем вводе. В C# это должно быть возможно с помощью yourString.Replace(" ", ""); (простая замена всех пробелов ничем = удаление пробелов)

01.02.2018
  • Большое спасибо (и всем остальным за ответы тоже). Это было действительно полезно и помогло мне найти правильное выражение для моего сайта. Завершенная версия - (\+{0,1}|({0,1}(([\d]+)\-{0,1}){0,1}\s{0,1})) +, который позволяет мне проверить число, которое начинается либо с «+», либо с «(», за которым следует последовательность чисел. Последовательность чисел может быть разделена пробелом, «-» или «)». 01.02.2018

  • 2

    + после набора символов является квантификатором (что означает, что предшествующий символ, набор символов или группа повторяются) по крайней мере один раз и неограниченное количество раз, и он жадный (соответствует максимально возможному).

    Тогда [0-9().+\s]+ будет соответствовать любому символу в наборе один или несколько раз.

    01.02.2018
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]