Подтвердить что ты не робот

Регулярное выражение для буквенно-цифровых символов, но не менее одного символа

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

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

4b9b3361

Ответ 1

^\d*[a-zA-Z][a-zA-Z0-9]*$

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

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

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

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

Ответ 2

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

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

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

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

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$

Ответ 3

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

Пояснение:

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

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

\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]*$

Ответ 4

^[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.

Ответ 5

^\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]*$

Ответ 6

^[0-9]*[a-zA-Z][a-zA-Z0-9]*$

Может быть

  • любое число, закончившееся символом,
  • или буквенно-цифровое выражение, начинающееся с символа
  • или буквенно-цифровое выражение, начинающееся с числа, с последующим символом и заканчивающееся буквенно-цифровым подвыражением