регулярное выражение для буквенно-цифровых символов, но не менее одного символа - PullRequest
19 голосов
/ 27 июня 2009

На моей странице asp.net у меня есть поле ввода, которое должно иметь следующую проверку:

Должен быть буквенно-цифровым, по крайней мере, с 1 символом (т.е. не может быть ВСЕМ числам).

Ответы [ 6 ]

54 голосов
/ 27 июня 2009
^\d*[a-zA-Z][a-zA-Z0-9]*$

В основном это означает:

  • Ноль или более ASCII цифр;
  • Один буквенный символ ASCII;
  • Ноль или более буквенно-цифровых символов ASCII.

Попробуйте несколько тестов, и вы увидите, что они пропустят любую буквенно-цифровую строку ASCII, где требуется хотя бы один нечисловой символ ASCII.

Ключом к этому является \d* спереди. Без этого регулярное выражение становится гораздо более неловким.

19 голосов
/ 28 июня 2009

Большинство ответов на этот вопрос верны, но есть альтернатива, которая (в некоторых случаях) предлагает большую гибкость, если вы хотите изменить правила позже:

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$

Это будет соответствовать любой последовательности буквенно-цифровых символов, но только если первая группа также соответствует всей последовательности. Это малоизвестный трюк в регулярных выражениях, который позволяет вам решать некоторые очень сложные проблемы проверки.

Например, скажем, вам нужно добавить еще одно ограничение: длина строки должна быть от 6 до 12 символов. Очевидные решения, опубликованные здесь, не сработают, но с помощью трюка с упреждением, регулярное выражение просто становится:

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
5 голосов
/ 27 июня 2009
^[\p{L}\p{N}]*\p{L}[\p{L}\p{N}]*$

Пояснение:

  • [\p{L}\p{N}]* соответствует нулю или более букв или цифр Юникода
  • \p{L} соответствует одной букве
  • [\p{L}\p{N}]* соответствует нулю или более букв или цифр Юникода
  • ^ и $ привязывают строку, гарантируя, что регулярное выражение соответствует строке whole . Вы можете пропустить их, в зависимости от того, какую функцию сопоставления регулярных выражений вы вызываете.

Результат: у вас может быть любая буквенно-цифровая строка, за исключением того, что где-то там должна быть буква.

\p{L} аналогично [A-Za-z], за исключением того, что оно будет включать все буквы всех алфавитов, с или без ударений и диакритических знаков. Это гораздо более инклюзивно, используя больший набор символов Unicode. Если вам не нужна эта гибкость, замените [A-Za-z]. Аналогичное замечание относится к \p{N}, который можно заменить на [0-9], если вы хотите, чтобы все было просто. См. MSDN страницу о классах символов для получения дополнительной информации.

Менее причудливая не-Unicode версия будет

^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
1 голос
/ 27 июня 2009
^\w*[\p{L}]\w*$

Это не так сложно. Регулярное выражение гласит: соответствует строке, начинающейся с любого количества символов слова (букв, цифр, знаков препинания (что вам может не понадобиться)), которое содержит один символ буквы (это часть [\p{L}] в середине), за которой следует количество символов слова снова.

Если вы хотите исключить пунктуацию, вам понадобится более здоровенное выражение:

^[\p{L}\p{N}]*[\p{L}][\p{L}\p{N}]*$

А если вас не интересует Unicode, вы можете использовать скучное выражение:

^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
1 голос
/ 27 июня 2009
^[0-9]*[A-Za-z][0-9A-Za-z]*$

это регулярное выражение, которое будет делать то, что вы после. ^ И $ соответствуют началу и концу слова, чтобы запретить другие символы. Вы можете заменить блок [0-9A-z] на \ w, но я предпочитаю более подробную форму, потому что при желании проще расширять другие символы.

Добавьте валидатор регулярных выражений на страницу asp.net в соответствии с руководством по MSDN: http://msdn.microsoft.com/en-us/library/ms998267.aspx.

0 голосов
/ 27 июня 2009
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$

Может быть

  • любое число, оканчивающееся символом,
  • или буквенно-цифровое выражение, начинающееся с символа
  • или буквенно-цифровое выражение, начинающееся с цифры, за которым следует символ и заканчивающееся буквенно-цифровым подвыражением
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...