regex для алфавитно-цифрового, но по крайней мере один символ

Библиотека C ++ STL настолько универсальна, что ни для кого не является оптимальной.

21
задан casperOne 22 January 2012 в 20:55
поделиться

6 ответов

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

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

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

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

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

56
ответ дан 29 November 2019 в 06:14
поделиться
^[\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]*$
5
ответ дан 29 November 2019 в 06:14
поделиться
^[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 .

1
ответ дан 29 November 2019 в 06:14
поделиться
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$

Может быть

  • любое число, заканчивающееся символом,
  • или буквенно-цифровое выражение, начинающееся с символа
  • , или буквенно-цифровое выражение, начинающееся с числа, за которым следует символ и оканчивается буквенно-цифровым подвыражением
0
ответ дан 29 November 2019 в 06:14
поделиться
^\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
ответ дан 29 November 2019 в 06:14
поделиться

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

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

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

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

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
20
ответ дан 29 November 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: