Регулярное выражение для приема буквенно-цифровых символов (6–10 символов).NET, C#
-
25-09-2019 - |
Вопрос
Я создаю форму регистрации пользователя, используя C# с .NET.У меня есть требование проверить поля пароля, введенные пользователем.Требование проверки приведено ниже.
- Он должен быть буквенно-цифровым (a-z, A-Z, 0-9).
- Он должен принимать 6–10 символов (минимум 6 символов, максимум 10 символов).
- По крайней мере, с одним алфавитом и цифрой (пример:
stack1over
)
Я использую регулярное выражение, как показано ниже.
^([a-zA-Z0-9]{6,10})$
Он удовлетворяет моим первым двум условиям.Не получается, когда я ввожу только символы или цифры.
Решение
Передайте его через несколько Regexes, если можете. Это будет намного чище, чем эти монструзды осмотра :-)
^[a-zA-Z0-9]{6,10}$
[a-zA-Z]
[0-9]
Хотя некоторые могут рассмотреть это умным, не нужно делать все С одним Regex (или даже с любым регелем, иногда - просто свидетельствуют о людях, которые хотят регулярное выражение, чтобы обнаружить количество от 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]$")
Я знаю, какой из них Идентификатор предпочитаю поддерживать :-)
Другие советы
Используйте позитив смотреть вперед
^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,10}$
Осмотры также называются утверждениями нулевой ширины.Они имеют нулевую ширину, как начало и конец строки (
^
,$
).Разница в том, что обходные пути на самом деле будут соответствовать символам, но затем откажутся от совпадения и вернут только результат:совпадение или не совпадение.Вот почему их называют «утверждениями».Они не используют символы в строке, а только подтверждают, возможно ли совпадение или нет.
Синтаксис осмотра:
(?=REGEX)
Позитивный прогноз(?!REGEX)
Отрицательный прогноз(?<=REGEX)
Позитивный взгляд назад(?<!REGEX)
Негативный ретроспективный анализ
string r = @"^(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{6,10}$";
Regex x = new Regex(r);
var z = x.IsMatch(password);