Нужно регулярное выражение ТОЛЬКО для буквенно-цифрового (без чистых цифр или букв) И не более 10 символов?

#regex

#регулярное выражение

Вопрос:

Я столкнулся с некоторыми проблемами с этим и не могу найти его в прошлых вопросах.

Критерии:

  1. Отклонять чистые цифры
  2. Отклонять чистые буквы
  3. Отклонять любые символы
  4. Принимайте ТОЛЬКО буквенно-цифровые комбинации
  5. ДОЛЖНО быть равно всего 10 символам

Вот что я сделал и проблемы с каждым:

  1. ^(?!^d*$)[a-zA-Zd]{10}$

    • Это не соответствует критериям # 2
  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 символов цифр / букв