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