Могу ли я сделать этот Regex Phone Validator более эффективным? - PullRequest
0 голосов
/ 14 апреля 2019

Я начал несколько дней назад связываться с Regex, и сегодня меня попросили сделать быстрое регулярное выражение.(Действительно ли это искусство создавать эффективные регулярные выражения?)

Итак, я написал это простое регулярное выражение, соответствующее израильскому номеру телефона: ^05[23489]-?[\d]{3}-?[\d]{4}$ Но выполнит ли это работу, заключающуюся в проверке около 10 000 телефонных номеров в пределах1 или 2 секунды?У меня нет компьютера, поэтому я не могу проверить.Спасибо за любые улучшения!

Правила матча:

  • Начинается с 05, затем одно из: 0, 2, 3, 4, 8, 9
  • затем необязательный дефис
  • , затем 3 цифры
  • , затем необязательный '-'
  • В конечном итоге получим 4 цифры.

Несколько примеров Допустимые номера телефонов:

  1. 052-587-6549
  2. 0531432941
  3. 058-3219321
  4. 059-321-1353

1 Ответ

0 голосов
/ 14 апреля 2019

[23489] не включает 0.Кроме того, не рекомендуется заключать в одинарные \d скобки классов символов, [\d] = \d.

Использовать

^05[023489]-?\d{3}-?\d{4}$
    ^

См. regex demo .

В Java вам не нужны якоря ^ и $, если вы используете шаблон с методом .matches(), так как он требует полного совпадения строки.

if (phone.matches("05[023489]-?\\d{3}-?\\d{4}")) {
    // This is valid
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...