#regex
#регулярное выражение
Вопрос:
Я столкнулся с некоторыми проблемами с этим и не могу найти его в прошлых вопросах.
Критерии:
- Отклонять чистые цифры
- Отклонять чистые буквы
- Отклонять любые символы
- Принимайте ТОЛЬКО буквенно-цифровые комбинации
- ДОЛЖНО быть равно всего 10 символам
Вот что я сделал и проблемы с каждым:
-
^(?!^d*$)[a-zA-Zd]{10}$
- Это не соответствует критериям # 2
-
^[a-zA-Z0-9]{10}$
- Это не соответствует критерию # 1
Я пробовал некоторые другие, которые соответствуют всем критериям, но не превышают лимит в 10 символов.
Любая помощь приветствуется.
Комментарии:
1. Можно ли применять несколько регулярных выражений? Вы могли бы использовать вариант # 2, но затем также проверьте впоследствии, что в нем есть хотя бы одна цифра и хотя бы одна буква.
2. Ничто не мешает вам использовать второй предварительный просмотр:
^(?!d $)(?![a-zA-Z] $)[a-zA-Zd]{10}$
3. @TylerMarshall В данном случае это должно было быть единственное регулярное выражение, которое вызывало проблему.
Ответ №1:
Вы можете использовать второй предварительный просмотр:
^(?!d $)(?![a-zA-Z] $)[a-zA-Zd]{10}$
Смотрите демонстрацию регулярных выражений и график регулярных выражений:
Подробные сведения
^
— начало строки(?!d $)
— отрицательный прогноз, который гарантирует, что вся строка состоит не только из цифр(?![a-zA-Z] $)
— вся строка не может состоять из одних букв[a-zA-Zd]{10}
— 10 букв или цифр$
— конец строки.
Ответ №2:
Попробуйте это:
(?=^.{10}$)^([a-z] d[a-z0-9]*|d [a-z][a-z0-9]*)$
Объяснение:
(?=^.{10}$)^([a-z] d[a-z0-9]*|d [a-z][a-z0-9]*)$
(?=^.{10}$) # there's exactly 10 characters following
^( | )$ # we match the entire string, containing either:
[a-z] d[a-z0-9]* # letters, followed by a number, followed by alphanumerics, or
d [a-z][a-z0-9]* # numbers, followed by a letter, followed by alphanumerics
Ответ №3:
Используйте lookahead, чтобы найти хотя бы один символ каждого требуемого вам типа, и укажите длину и ограничение символа в «обычной» части вашего регулярного выражения:
^(?=.*[a-zA-Z])(?=.*d)[0-9a-zA-Z]{10}$
(?=.*[a-zA-Z])
— Посмотрите вперед и найдите букву,(?=.*d)
— Посмотрите вперед и найдите цифру[0-9a-zA-Z]{10}
— ровно 10 символов цифр / букв