Есть ли способ объединить выражения в str.match в Ruby? - PullRequest
0 голосов
/ 03 марта 2020

Ищет совпадение, если в конкретной строке есть хотя бы один ди git, один верхний и один нижний, исключая символы "% ^ & $ #" и пробелы. Так я использую str.match? Интересно, если вместо && .. && .. конкатенации выражений типа data.match?(/\d+|[[:upper:]]|[[:lower:]]|\w+/) не используется одна строка, то, похоже, не работает.

def chkin(data)
  if data.match?(/\d+/) \
      && data.match?(/[[:upper:]]+/) \
      && data.match?(/[[:lower:]]+/) \
      && data.match?(/\w+/) \
      && data.length >= 10

    return true
  else
    return false
  end
end

Также не работает \ w + альфа-цифра c с: "2aA1b%%sdf3123!!" >> Истинно, когда оно должно быть ложным.

1 Ответ

2 голосов
/ 03 марта 2020

Это можно сделать с помощью регулярного выражения, содержащего три положительных указателя :

r = /(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/

"abcDE27f".match?(r) #=> true
"abcde27f".match?(r) #=> false
"ABCDE27F".match?(r) #=> false
"abcDEfgh".match?(r) #=> false

Вы можете добавить другие требования с помощью дополнительных положительных указателей. Например, если длина строки должна быть от 8 до 10 символов, вы можете добавить

(?=.{8,10}\z)

Если вы хотите, чтобы строка содержала только буквы алфавита c, добавьте

(?=\p{Alnum}+\z)

или поставьте \A\p{Alnum}+\z в конце регулярного выражения.

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