Регулярное выражение для буквенно-цифровых символов, но не менее одного символа
На моей странице asp.net у меня есть поле ввода, которое должно иметь следующую проверку:
Должен быть буквенно-цифровым, по крайней мере с 1 символом (то есть не может быть ВСЕМИ числами)
6 ответов
^\d*[a-zA-Z][a-zA-Z0-9]*$
В основном это означает:
- Ноль или более ASCII цифр;
- Один буквенный символ ASCII;
- Ноль или более буквенно-цифровых символов ASCII.
Попробуйте несколько тестов, и вы увидите, что они пропустят любую буквенно-цифровую строку ASCII, где требуется хотя бы один нечисловой символ ASCII.
Ключом к этому является \d*
впереди. Без этого регулярное выражение становится гораздо более неловким.
Большинство ответов на этот вопрос правильные, но есть альтернатива, которая (в некоторых случаях) предлагает большую гибкость, если вы хотите изменить правила позже:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$
Это будет соответствовать любой последовательности буквенно-цифровых символов, но только если первая группа также соответствует всей последовательности. Это малоизвестный трюк в регулярных выражениях, который позволяет вам решать некоторые очень сложные проблемы проверки.
Например, скажем, вам нужно добавить другое ограничение: длина строки должна быть от 6 до 12 символов. Очевидные решения, опубликованные здесь, не сработают, но с помощью трюка с упреждением, регулярное выражение просто становится:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
^[\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]*$
^[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.
^\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]*$
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$
Может быть
- любое число, оканчивающееся символом,
- или буквенно-цифровое выражение, начинающееся с символа
- или буквенно-цифровое выражение, начинающееся с числа, за которым следует символ и заканчивающееся буквенно-цифровым подвыражением