Я создаю форму регистрации пользователя с помощью C# с.NET. У меня есть требование для проверки вводимых полей пароля пользователя. Требование проверки как ниже.
stack1over
)Я использую регулярное выражение как ниже.
^([a-zA-Z0-9]{6,10})$
Это удовлетворяет мои первые 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]$")
Я знаю, какой я предпочитаю поддерживать: -)
Используйте положительный 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