2016-07-12 5 views
-3

У меня есть это регулярное выражение:Regex: чтобы соответствовать определенные символы, но нет места, разрешено

(.*^(?=.{16,25}$)(?=.*[a-z]{1,})(?=.*[A-Z]{1,})(?=.*[0-9]{1,})(?=.*\W{1,8}).*$) 

Для соответствия пароля (строки) на:

  • 16-25 длина
  • 1 ко многим аз
  • 1 многим AZ
  • 1 ко многим 0-9
  • 1 до многих символов

Но я не хочу \s, и я не знаю, как поместить его в регулярное выражение.

Любые предложения?

Я редактировать исходные предельные символы {1,8} до {1}

+1

Вы уверены, что модель работает на всех? Вы хотите потребовать от 1 до 8 * последовательных * более низких, прописных букв, цифр и символов? '. *' В начале делает недействительным просмотр проверки длины. Попробуйте ['^ (? = \ S {16,25} $) (? = (?: [^ Az] * [az]) {1,8}) (? = (?: [^ AZ] * [AZ ]) {1,8}) (= (:? \ D * \ г) {1,8}) (= (?:? \ ш * \ W) {1,8}) \ S * $ '] (https://regex101.com/r/fH8mF7/1), который позволяет от 1 до 8 символов, требуемых в любой строке. '\ S' следует использовать для запрета пробелов. –

+1

Не было бы проще и (потенциально) более безопасным просто сказать 16-25 символов без пробелов, а не произвольно объявлять, что первый 1-8 должен быть в нижнем регистре, в следующем верхнем регистре, а затем цифры, а затем символы? Тогда вам просто нужно '/^[^ \ s] {16,25} $ /': https://xkcd.com/936/ – CD001

+1

'/^[^ \ s] {16,25} $ /' позволил бы пароль, полный 'a''s –

ответ

2

Описание

^(?=(?:[^a-z]*?[a-z]){1,8}(?!.*?[a-z]))(?=(?:[^0-9]*?[0-9]){1,8}(?!.*?[0-9]))(?=(?:[^A-Z]*?[A-Z]){1,8}(?!.*?[A-Z]))(?=(?:[^!-\/:[email protected][-`{-~]*?[!-\/:[email protected][-`{-~]){1,8}(?!.*?[!-\/:[email protected][-`{-~]))[a-zA-Z0-9!-\/:[email protected][-`{-~]{16,25}$ 

Regular expression visualization

** Для того, чтобы увидеть изображение лучше, просто щелкните изображение правой кнопкой мыши и выберите вид в новом окне

Это регулярное выражение будет делать следующее:

  • требует строки, чтобы быть 16-25 длиной
  • требует 1 до 8 аза символов в любом месте в строке, и не более
  • не требуются от 1 до 8 символов AZ в любом месте строки и не более
  • требуют 1 до 8 символов, 0-9 где-нибудь в строке и не более
  • требуют от 1 до 8 символов в любом месте строки и не более
  • не позволяют нулевой зр тузы

Пример

Демо

https://regex101.com/r/oS4mY2/2

Пример текста

Примечание: первый пример из вашего commment, но она содержит более 8 нижний поэтому они не совпадают.

aWoeed1#fde39393aii 
aWoeed1#fde39393AII 

Образец Матчи

aWoeed1#fde39393AII 

Объяснение

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
^      the beginning of the string 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (between 1 and 
          8 times (matching the most amount 
          possible)): 
-------------------------------------------------------------------------------- 
     [^a-z]*?     any character except: 'a' to 'z' (0 or 
           more times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [a-z]     any character of: 'a' to 'z' 
-------------------------------------------------------------------------------- 
    ){1,8}     end of grouping 
-------------------------------------------------------------------------------- 
    (?!      look ahead to see if there is not: 
-------------------------------------------------------------------------------- 
     .*?      any character except \n (0 or more 
           times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [a-z]     any character of: 'a' to 'z' 
-------------------------------------------------------------------------------- 
    )      end of look-ahead 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (between 1 and 
          8 times (matching the most amount 
          possible)): 
-------------------------------------------------------------------------------- 
     [^0-9]*?     any character except: '0' to '9' (0 or 
           more times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [0-9]     any character of: '0' to '9' 
-------------------------------------------------------------------------------- 
    ){1,8}     end of grouping 
-------------------------------------------------------------------------------- 
    (?!      look ahead to see if there is not: 
-------------------------------------------------------------------------------- 
     .*?      any character except \n (0 or more 
           times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [0-9]     any character of: '0' to '9' 
-------------------------------------------------------------------------------- 
    )      end of look-ahead 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (between 1 and 
          8 times (matching the most amount 
          possible)): 
-------------------------------------------------------------------------------- 
     [^A-Z]*?     any character except: 'A' to 'Z' (0 or 
           more times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [A-Z]     any character of: 'A' to 'Z' 
-------------------------------------------------------------------------------- 
    ){1,8}     end of grouping 
-------------------------------------------------------------------------------- 
    (?!      look ahead to see if there is not: 
-------------------------------------------------------------------------------- 
     .*?      any character except \n (0 or more 
           times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [A-Z]     any character of: 'A' to 'Z' 
-------------------------------------------------------------------------------- 
    )      end of look-ahead 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (between 1 and 
          8 times (matching the most amount 
          possible)): 
-------------------------------------------------------------------------------- 
     [^!-\/:[email protected][-`{-   any character except: '!' to '\/', ':' 
     ~]*?      to '@', '[' to '`', '{' to '~' (0 or 
           more times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [!-\/:[email protected][-`{-~]   any character of: '!' to '\/', ':' to 
           '@', '[' to '`', '{' to '~' 
-------------------------------------------------------------------------------- 
    ){1,8}     end of grouping 
-------------------------------------------------------------------------------- 
    (?!      look ahead to see if there is not: 
-------------------------------------------------------------------------------- 
     .*?      any character except \n (0 or more 
           times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [!-\/:[email protected][-`{-~]   any character of: '!' to '\/', ':' to 
           '@', '[' to '`', '{' to '~' 
-------------------------------------------------------------------------------- 
    )      end of look-ahead 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    [a-zA-Z0-9!-\/:[email protected][-  any character of: 'a' to 'z', 'A' to 'Z', 
    `{-~]{16,25}    '0' to '9', '!' to '\/', ':' to '@', '[' 
          to '`', '{' to '~' (between 16 and 25 
          times (matching the most amount possible)) 
-------------------------------------------------------------------------------- 
    $      before an optional \n, and the end of the 
          string 
+0

wow thats great thank U !! Я создаю помощник для своей структуры Laravel, чтобы пользователь мог настроить какой пароль/валидацию я должен использовать ... Длина строки, min en max 0-9a-zA-Z & символы и т. д. И это регулярное выражение просто замечательно – mangas

0

Описание

В вашем выражении взгляд aheads как (?=.*[A-Z]{1,}) тестируют, чтобы увидеть, если у вас есть 1 или более A-Z , Они вернут true, если у вас есть любое число (больше нуля) желаемого класса символов. Продолжая тестирование, чтобы увидеть, есть ли более одного совпадения, просто избыточно.

^(?=(?:[^a-z]*?[a-z]){1})(?=(?:[^0-9]*?[0-9]){1})(?=(?:[^A-Z]*?[A-Z]){1})(?=(?:[^!-\/:[email protected][- {- ~] *? [- /: - @ [- {-~]){1})[a-zA-Z0-9!-\/:[email protected][- {- ~] {16,25} $ `

Regular expression visualization

** Для того, чтобы увидеть изображение лучше, просто кликните правой кнопкой мыши на изображение и выберите пункт Открыть в новом окне

Это регулярное выражение будет делать следующее:

  • требуют строку быть 16-25 длиной
  • требует, по крайней мере, 1 a-z символов в любом месте строки
  • требует по крайней мере 1 A-Z символов в любом месте строки
  • требует, по крайней мере, 1 0-9 символов в любом месте строки
  • требует, по крайней мере, 1 символ в любом месте строки
  • позволяют нулевые пространства

Пример

Демо

https://regex101.com/r/oS4mY2/3

Пример текста

Примечание последняя строка не соответствует, потому что он не имеет символ

aWoeed1#fde39393aii 
aWoeed1#fde39393AII 
aaaaaaaaaaaaaaaaa1A 

Образец Матчи

MATCH 1 
0. [0-19] `aWoeed1#fde39393aii` 

MATCH 2 
0. [20-39] `aWoeed1#fde39393AII` 

Объяснение

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
^      the beginning of the string 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (1 times): 
-------------------------------------------------------------------------------- 
     [^a-z]*?     any character except: 'a' to 'z' (0 or 
           more times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [a-z]     any character of: 'a' to 'z' 
-------------------------------------------------------------------------------- 
    ){1}      end of grouping 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (1 times): 
-------------------------------------------------------------------------------- 
     [^0-9]*?     any character except: '0' to '9' (0 or 
           more times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [0-9]     any character of: '0' to '9' 
-------------------------------------------------------------------------------- 
    ){1}      end of grouping 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (1 times): 
-------------------------------------------------------------------------------- 
     [^A-Z]*?     any character except: 'A' to 'Z' (0 or 
           more times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [A-Z]     any character of: 'A' to 'Z' 
-------------------------------------------------------------------------------- 
    ){1}      end of grouping 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (1 times): 
-------------------------------------------------------------------------------- 
     [^!-\/:[email protected][-`{-   any character except: '!' to '\/', ':' 
     ~]*?      to '@', '[' to '`', '{' to '~' (0 or 
           more times (matching the least amount 
           possible)) 
-------------------------------------------------------------------------------- 
     [!-\/:[email protected][-`{-~]   any character of: '!' to '\/', ':' to 
           '@', '[' to '`', '{' to '~' 
-------------------------------------------------------------------------------- 
    ){1}      end of grouping 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    [a-zA-Z0-9!-\/:[email protected][-  any character of: 'a' to 'z', 'A' to 'Z', 
    `{-~]{16,25}    '0' to '9', '!' to '\/', ':' to '@', '[' 
          to '`', '{' to '~' (between 16 and 25 
          times (matching the most amount possible)) 
-------------------------------------------------------------------------------- 
    $      before an optional \n, and the end of the 
          string 

 Смежные вопросы

  • Нет связанных вопросов^_^