Regex для проверки моего пароля - PullRequest
0 голосов
/ 09 марта 2012

Мне нужно регулярное выражение для моего формата пароля. Он должен гарантировать, что пароль содержит только буквы a-z, цифры 0-9 и специальные символы:. @ # $% &. Я использую язык программирования .NET C #. Это мой код:

Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]$");
if (!userAndPassPattern.IsMatch(username) || !userAndPassPattern.IsMatch(password))
    return false;

Проблема в том, что я всегда получаю ложное возвращение.

Ответы [ 5 ]

3 голосов
/ 09 марта 2012

!A || !B логически эквивалентно !(A && B)

Так что вы могли бы написать лучше

!(userAndPassPattern.IsMatch(username) && userAndPassPattern.IsMatch(password))

Тогда у вас есть специальный символ $ в вашем классе персонажей, возможно, вам нужно его замаскировать \$
Я не совсем уверен в этом, потому что в классе персонажей это не специальный персонаж. Возможно, это зависит от используемого движка RegEx. Если вы маскируете $, это не должно причинить вреда ([a-z0-9.@#\$%&])

Тогда у вас есть только один символ для сопоставления. Вам нужен квантификатор

[a-z0-9.@#$%&] означает, что один единственный символ из заданного будет соответствовать a или b или 0, но не ab
[a-z0-9.@#$%&]+ много символов из заданного, от 1 до бесконечных появлений, будут соответствовать a, b, ab и ba и т. Д.

редактировать

Это то, что вы хотите

Regex userAndPassPattern = new Regex("^[a-z0-9\.@#\$%&]+$");
if (!(userAndPassPattern.IsMatch(username) && userAndPassPattern.IsMatch(password))) {
    return false;
}
2 голосов
/ 09 марта 2012

Вы забыли добавить '+' для совпадения один или несколько раз:

  Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]+$");
1 голос
/ 09 марта 2012

У вас две проблемы. Первый . и $ нужно экранировать. Во-вторых, вы соответствуете только 1 символ. Добавьте + перед последним $:

^[a-z0-9\.@#\$%&]+$

Редактировать: еще одно предложение: если у вас есть минимальная / максимальная длина, вы можете заменить знак +, например, {6,16} или любым другим значением, которое вы считаете подходящим. Это будет соответствовать строкам длиной от 6 до 16 символов и отклонять любые более короткие или более длинные строки. Если вас не интересует верхний предел, вы можете использовать {6,}.

1 голос
/ 09 марта 2012

Этот код Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]$"); будет соответствовать только имени пользователя или паролю длиной в один символ.

Вы ищете что-то подобное Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]+$");, которое будет соответствовать одному или нескольким персонажам в вашем классе. Символ + указывает, что он соответствует одному или нескольким предыдущим атомам (в данном случае это класс символов, указанный вами в квадратных скобках)

Кроме того, если вы не хотели ограничивать соответствие строчными буквами, вы должны добавить 'A-Z' к классу символов Regex userAndPassPattern = new Regex("^[A-Za-z0-9.@#$%&]$");

Возможно, вы также захотите внедрить ограничение минимальной длины, которое можно выполнить, заменив + конструкцией {n,}, где n - минимальная длина, которую вы хотите сопоставить. Например:

это будет соответствовать минимум 6 символов

Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]{6,}$");

это будет соответствовать минимум 6 и максимум 12

Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]{6,12}$");

0 голосов
/ 09 марта 2012

Вы пытались использовать дословный строковый литерал при использовании escape-последовательностей регулярных выражений?

Regex userAndPassPattern = new Regex(@"^[a-z0-9@#\$%&]+$");
if (!userAndPassPattern.IsMatch(username) || !userAndPassPattern.IsMatch(password))
    return false;

Ваш шаблон допускает только один набор символов , который вы, вероятно, хотите оператор повторения как * + или {10,}.

Ваш набор символов включает ., который соответствует любому символу, побеждая объект класса символов.Если вы хотите сопоставить ".", то вам нужно экранировать его с помощью \.

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