На моей странице asp.net у меня есть поле ввода, которое должно содержать следующую проверку:
Должно быть буквенно-цифровое, с не менее 1 символом (т.е. не может быть ВСЕМИ).
На моей странице asp.net у меня есть поле ввода, которое должно содержать следующую проверку:
Должно быть буквенно-цифровое, с не менее 1 символом (т.е. не может быть ВСЕМИ).
^\d*[a-zA-Z][a-zA-Z0-9]*$
В основном это означает:
Попробуйте выполнить несколько тестов, и вы увидите, что это будет проходить любую буквенно-цифровую строку 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]*$
Может быть