BorisT
@BorisT

Вхождение цифр в строку не более n-раз

Как написать регулярное выражение, которое проверяет вхождение в слово из латинских символов не более 3-х цифр? Не последовательное вхождение цифр.

Мое дикое решение:
(^[a-z]*[0-9]{0,1}[a-z]*[0-9]{0,1}[a-z]*[0-9]{0,1}[a-z]*$)|(^[a-z]*[0-9]{0,2}[a-z]*[0-9]{0,1}[a-z]*$)|(^[a-z]*[0-9]{0,1}[a-z]*[0-9]{0,2}[a-z]*$)|(^[a-z]*[0-9]{0,3}[a-z]*$)
  • Вопрос задан
  • 3015 просмотров
Решения вопроса 1
m_z
@m_z
^(?:[a-z]*[0-9]?[a-z]*){0,3}$
но нужно все кейсы проверить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
akral
@akral
В ответе m_z две небольших проблемы: «не цифры» — лишь a-z, лучше ^\d, и плохая скорость на неудачных проверках, ибо группу слева и справа можно сформировать n способами. Вот вариант чуток улучшенный:
^(?:[^\d]*\d){0,3}[^\d]*$

А вообще, если критично по скорости, можно с помощью 10 REPLACE убрать цифры и сравнить длину с длиной оригинальной строки. Возможно это будет быстрее (а возможно, и нет).
Ответ написан
Sild
@Sild
может вытащить регуляркой все цифры и посчитать длину полученной строки?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы