#java #regex
#java #регулярное выражение
Вопрос:
Несколько дней назад я начал возиться с регулярным выражением, и сегодня меня попросили создать быстрое регулярное выражение. (Действительно ли создание эффективных регулярных выражений — это искусство?)
Итак, я написал это простое регулярное выражение, чтобы соответствовать израильскому номеру телефона: ^05[23489]-?[d]{3}-?[d]{4}$
Но выполнит ли оно задачу, которая заключается в завершении проверки около 10 000 телефонных номеров в течение 1 или 2 секунд? У меня здесь нет компьютера, поэтому я не могу проверить. Спасибо за любые улучшения!
Правила соответствия:
- Начинается с 05, затем один из: 0, 2, 3, 4, 8, 9
- затем необязательный дефис
- затем 3 цифры
- тогда необязательно ‘-‘
- В конечном итоге получается 4 цифры.
Несколько примеров действительных телефонных номеров:
- 052-587-6549
- 0531432941
- 058-3219321
- 059-321-1353
Комментарии:
1. Но действительно ли этого достаточно, чтобы проверить около 10 000 телефонных номеров за 1 или 2 секунды? : вы пробовали? Что произошло?
2. Можете ли вы указать несколько действительных и недействительных телефонных номеров, которые мы могли бы использовать для проверки скорости?
3. о, я забыл упомянуть, что у меня сейчас нет компьютера, и эта миссия срочная.. нет, я не пробовал.
4. Ах, так ты пишешь это сообщение на… пишущая машинка? Вот интерактивная среда IDE, которую вы можете использовать даже на своем телефоне. ideone.com
5. lol нет, я с моего телефона o.O спасибо за сайт, я проверю случайные телефонные номера и обновлю сообщение соответственно результату.
Ответ №1:
[23489]
Не включает 0
. Кроме того, не стоит заключать single d
в скобки символьного класса, [d]
= d
.
Используйте
^05[023489]-?d{3}-?d{4}$
^
Смотрите демонстрацию регулярных выражений.
В Java вам не нужны ^
$
привязки и, если вы используете шаблон с .matches()
методом, поскольку для этого требуется полное совпадение строк.
if (phone.matches("05[023489]-?\d{3}-?\d{4}")) {
// This is valid
}