Да
Честно говоря, что вы просите? Почему бы тебе не проверить это?
Если, однако, вам нужны предложения по его улучшению, задайте несколько вопросов:
- Что проверяет это регулярное выражение?
- Почему у вас такой большой набор разрешенных символов?
- Почему бы вам не использовать
/\w/
вместо /0-9a-zA-Z_/
?
- Почему у вас все это в
()
с? Вам не нужно фиксировать все это, так как у вас уже есть все это, и они не нужны, чтобы группировать что-либо.
Что бы я сделал, это проверил бы длину отдельно, а затем проверил по регулярному выражению, чтобы увидеть, есть ли у него плохие символы. Ваш список хороших персонажей, кажется, достаточно велик, так что может быть проще сделать это таким образом. Но это может зависеть от того, для чего вы это делаете.
РЕДАКТИРОВАТЬ: Теперь, когда я знаю, что это PHP-ориентированный, /\w/
безопасен, потому что PHP использует библиотеку PCRE, которая не совсем Perl, а в PCRE \w
будет не соответствовать Unicode слово символы. Таким образом, почему бы не проверить длину и убедиться, что нет недопустимых символов:
if(strlen($string) >= 4 && preg_match('[\s~\\]', $string) == 0) {
# valid password
}
В качестве альтернативы используйте малоиспользуемый класс символов POSIX [[:graph:]]
. В PHP он должен работать почти так же, как и в Perl. [[:graph:]]
соответствует любому буквенно-цифровому символу или знаку пунктуации, который звучит так, как вы хотите, а [[:^graph:]]
должен соответствовать противоположному. Чтобы проверить, все ли символы соответствуют графику:
preg('^[[:graph:]]+$', $string) == 1
Чтобы проверить, не совпадают ли символы с графиком:
preg('[[:^graph:]]', $string) == 0