Пароль Regex позволяет символ © в конце слова - PullRequest
1 голос
/ 13 октября 2011

Я использую следующее регулярное выражение, чтобы пароль состоял только из букв и цифр.

if(! reFind("^[[:alnum:][:punct:]]", this.password)) {
                this.addError(property="Password", message="Password must contain only letters, numbers, or punctuation marks.");
            }

Если я добавлю знак авторского права © в начало слова, блоки ReFindЭто;если я добавлю его в конец слова, оно пройдет.Так что ©abcd не проходит, в то время как abcd©.

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

Ответы [ 3 ]

7 голосов
/ 13 октября 2011

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

if(reFind("[^[:alnum:][:punct:]]", this.password))

if(! reFind("^[[:alnum:][:punct:]]*$", this.password))

(Примечание: они также отличаются от ваших тем, что допускают пароль нулевой длины.сообщение в этом случае.)

3 голосов
/ 13 октября 2011

Попробуйте это:

if(!reFind("^[[:alnum:][:punct:]]+$", this.password))
0 голосов
/ 13 октября 2011

почему вы не можете написать что-то вроде:

^[0-9a-zA-Z]+$
...