Regex для имени пользователя с очень конкретными правилами - PullRequest
3 голосов
/ 01 июля 2011

Я не регулярное ниндзя.Я настраивал это в течение часа, и я уверен, что кто-то в SO может сделать это более эффективно.

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

Правила:

  • длина: максимум 24 символа, минимум 3 символа
  • не должно начинаться или заканчиваться пробелом
  • любое число из следующих(до максимальной длины поля 24):
    • 0-9
    • AZ
    • az
    • .(точка)
    • '' (пробел)
  • ноль или по одному из следующего набора:
    • @ (at)
    • _ (подчеркивание)
    • - (дефис)
    • '(апострофия)

Вот что у меня так далеко:

^[^ ](?=[A-Za-z0-9. @_\-]{1,24}$)[a-zA-Z0-9_. ]*\.?[a-zA-Z0-9_]*[^ ]$

но это не совсем верно.Я не уверен, как избежать '(апостроф)

также, должен ли я использовать другое предвидение для символов, допускаемых ноль или один раз?

Спасибо.

Обновление: Обратите внимание, что целью являются библиотеки регулярных выражений .Net 4.0 с C #

Ответы [ 2 ]

4 голосов
/ 01 июля 2011

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

(?!^.*?([@'_-]).*\1.*$)^(?! )[\w. @'-]{3,24}(?<! )$

См. здесь, в Regexr

(?!^.*?([@'_-]).*\1.*$) является негативным прогнозом, если один из названных вами символов найден, он помещается в группу захвата 1, и для гарантии того, что это не повторяется, используется обратная ссылка \1.

^(?! ) являетсяотрицательный взгляд, чтобы убедиться, что после начала строки нет пробела.

[\w. @'-]{3,24} Символы, которые вы допускаете по крайней мере 3, максимум 24 из них

(?<! )$ - отрицательный взгляд заубедитесь, что до конца строки нет пробела.

4 голосов
/ 01 июля 2011

Вы не должны решать эту проблему с помощью одного регулярного выражения, это затрудняет чтение и модификацию кода.Напишите по одной функции для каждого правила, тогда ваша проверка станет очень понятной (не говоря уже о сопровождающем)здесь (это было до того, как вы обновили свой вопрос с помощью целевой системы; -)

...