сделать специальные символы необязательными в регулярном выражении - PullRequest
2 голосов
/ 18 января 2012

У меня есть следующее требование:

пароль должен состоять из 6-18 символов и содержать как минимум одну букву и одну цифру.Допускаются специальные символы, такие как @,%, &, #.

Я создал это:

^.*(?=.{6,18})(?=.*\d)(?=.*[A-Za-z])(?=.*[@%&#]).*$

, но он также принимает и другие специальные символы, такие как _, и требует, чтобы один изэти специальные символы @% & # должны быть в строке.Я хочу сделать это необязательным.Означает, что если пользователь вводит один из этих специальных символов, тогда строка должна быть действительной, но если пользователь не вводит эти символы, она не должна быть недействительной.и если пользователь вводит любой другой специальный символ, строка должна быть недействительной.

Ответы [ 4 ]

6 голосов
/ 18 января 2012

Как сказали другие респонденты, именно .* соответствует этим нежелательным персонажам. Первый .* не должен был быть там вообще, а второй должен быть заменен на класс персонажа.

Или, что еще лучше, добавьте $ в конец первого взгляда; теперь он проверяет длину и состав. .* в конце и два, которые были в пределах предпросмотра, в порядке, потому что состав уже был проверен.

^(?=[A-Za-z0-9@%&#]{6,18}$)(?=.*\d)(?=.*[A-Za-z]).*$

or, more readably:

^                             # start of string
(?=[A-Za-z0-9@%&#]{6,18})$    # length and composition
(?=.*\d)                      # required digit
(?=.*[A-Za-z])                # required letter
.*                            # go ahead and consume it
$                             # end of string
2 голосов
/ 18 января 2012

'.'разрешает использовать любой символ рядом с новой строкой (\ n), поэтому, если вы пропустите последний раздел вашего регулярного выражения, он должен делать то, что вам нужно:

^.*(?=.{6,18})(?=.*\d)(?=.*[A-Za-z]).*$

Если вы хотите, чтобы некоторые символы не были разрешены, такие как '_«Вы можете поместить их в отрицательный взгляд вперед, например,

^.*(?=.{6,18})(?=.*\d)(?=.*[A-Za-z])(?!.*[_]).*$

Запретить« _ »и« * »в строке.

0 голосов
/ 18 января 2012

Вместо использования "." который позволяет почти все, используйте что-то вроде:

[0-9a-zA-Z@#%&]
0 голосов
/ 18 января 2012

Для длины просто используйте функцию длины строки.

Затем просто проверьте, что ваш ввод соответствует [0-9], [A-Za-z] and ^ [0-9A-Za-z @% & #] + $ '.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...