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

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

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

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

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

Это удовлетворяет мои первые 2 условия. Это перестало работать, когда я ввожу только символы или числа.

5
задан Cœur 2 December 2018 в 02:56
поделиться

2 ответа

Некоторое время мы использовали долгий опрос Джетти и были очень довольны этим. Мы никогда не были близки к 10K + параллельным пользователям , как было продемонстрировано разработчиками Jetty. Однако добавленные накладные расходы на 300-400 одновременных соединений Cometd на наших серверах низкого уровня были почти не заметны. В другой статье объясняется кластеризация Jetty и Cometd с использованием Terracotta (которая является еще одной удивительной частью программного обеспечения).

-121--3505009-

В пуле потоков ожидали бы рабочие потоки.

Затем мастер, ожидающий выбора (для чтения и записи).

По мере поступления данных мастер добавляет задания в пул потоков. При добавлении каждого задания поток пробуждается и выполняет задание и возвращается в пул. Таким образом, вы не блокируете потоки, ожидающие определенных портов с recv (), и фиксированный набор дочерних потоков может обрабатывать весь входящий трафик.

Currentl libs, поддерживающие эту функциональность в готовых объектах:

-121--4293804-

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

^[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]$")

Я знаю, какой я предпочитаю поддерживать: -)

9
ответ дан 18 December 2019 в 10:44
поделиться

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

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

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

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

  • (?=REGEX) Positive lookahead
  • (?!REGEX) Negative lookahead
  • (?<=REGEX) Positive lookbehind
  • (? Negative lookbehind
7
ответ дан 18 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: