2016-07-20 4 views
0

Образец должен совпадать, если имеется по меньшей мере 1 цифровой символ ИЛИ 1 и общая длина 8 или более.Дополнительная опция и группа

Он частично работает, но только в том случае, если в начале используются специальные символы или числовые значения.

До сих пор у меня есть:

/([\d]|[[email protected]#$%^&*()_+])([a-z]).{8,}/ 
+1

Точно так же вы знаете, '[Az]' также содержит символы '' [\]^'_'' –

+0

Хорошая точка, спасибо, понизят ее до az. – Adrian

+0

Возможный дубликат [Regex for Password Должен содержать не менее 8 символов, минимум 1 номер и буквы в нижнем и верхнем регистре и специальные символы] (http://stackoverflow.com/questions/19605150/regex-for-password-must- be-содержать-по-наименьшему-8-символов-наименее-1-число-и-бот) –

ответ

3

Почему усложнять в RegExp? Конечно, это возможно, но вы должны указать каждую перестановку возможных комбинаций символов, соответствующих этим требованиям. Просто сделайте это:

if (/[\[email protected]#$%^&*()_+]/.test(string) && string.length >= 8) { ... } 
+0

Регулярное выражение также может быть просто: '/ [\ d! @ # $%^& *() _ +] /' – rgthree

+0

О, правда, я это исправлю. Я просто скопировал его регулярное выражение –

0

Вы делаете это в обратном направлении, не пытайтесь положительно соответствовать специальным символам, что ограничивает то, что люди могут/должны использовать. Вместо матча что-то вы считаете не не специальный, например:

pw.length >= 8 && /\d/.test(pw) && /[^a-z\d\x20]/i.test(pw) 

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

&& !/[\x00-\x20]/.test(pw) 
Смежные вопросы