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

StackOverflow https://stackoverflow.com/questions/2190376

Вопрос

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

  1. Он должен быть буквенно-цифровым (a-z, A-Z, 0-9).
  2. Он должен принимать 6–10 символов (минимум 6 символов, максимум 10 символов).
  3. По крайней мере, с одним алфавитом и цифрой (пример: 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);

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top