Регулярное выражение для приема буквенно-цифровых символов (6-10 символов) .NET, C # - PullRequest
5 голосов
/ 03 февраля 2010

Я создаю форму регистрации пользователя, используя C # с .NET. У меня есть требование для проверки введенных пользователем полей пароля. Требования к валидации приведены ниже.

  1. Должно быть буквенно-цифровым (a-z, A-Z, 0-9)
  2. Он должен принимать 6-10 символов (минимум 6 символов, максимум 10 символов)
  3. Как минимум с 1 алфавитом и цифрой (пример: stack1over)

Я использую регулярное выражение, как показано ниже.

^([a-zA-Z0-9]{6,10})$

Это удовлетворяет моим первым двум условиям. Сбой при вводе только символов или цифр.

Ответы [ 3 ]

9 голосов
/ 03 февраля 2010

Пропустите его через несколько регулярных выражений, если можете. Это будет намного чище, чем эти чудовища: -)

^[a-zA-Z0-9]{6,10}$
[a-zA-Z]
[0-9]

Хотя некоторые могут счесть это умным, нет необходимости делать все с одним регулярным выражением (или даже с любым регулярным выражением, иногда - просто свидетельствуйте людям, которые хотят, чтобы регулярное выражение обнаруживало числа между 75 и 4093 ).

Вы бы предпочли какой-нибудь хороший чистый код вроде:

if not checkRegex(str,"^[0-9]+$")
    return false
val = string_to_int(str);
return (val >= 75) and (val <= 4093)

или что-то вроде:

return checkRegex(str,"^7[5-9]$|^[89][0-9]$|^[1-9][0-9][0-9]$|^[1-3][0-9][0-9][0-9]$|^40[0-8][0-9]$|^409[0-3]$")

Я знаю, какой я бы предпочел бы сохранить: -)

7 голосов
/ 03 февраля 2010

Используйте положительный Lookahead

^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,10}$

Осмотр также называется утверждением нулевой ширины. Они имеют нулевую ширину, как начало и конец строки (^, $). Разница заключается в том, что обходные пути на самом деле будут соответствовать символам, но затем откажутся от совпадения и вернут только результат: совпадение или отсутствие совпадения. Вот почему они называются «утверждениями». Они не потребляют символы в строке, а только утверждают, возможно ли совпадение.

Синтаксис для осмотра:

  • (?=REGEX) Позитивный взгляд
  • (?!REGEX) Отрицательный взгляд
  • (?<=REGEX) Позитивный взгляд за спиной
  • (?<!REGEX) Отрицательный взгляд за спиной
0 голосов
/ 05 декабря 2013
string r = @"^(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{6,10}$";
Regex x = new Regex(r);
var z = x.IsMatch(password);

http://www.regular -expressions.info / refadv.html

http://www.regular -expressions.info / lookaround.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...