首页 > 解决方案 > 有没有办法在 Ruby 中连接 str.match 中的表达式?

问题描述

如果一个特定的字符串至少有一个数字、一个大写和一个小写,不包括符号 '%^&$#' 和空格,我正在寻找匹配。所以我正在使用 str.match?我想知道是否有一个衬线而不是 && .. && .. 连接表达式 likedata.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+ 字母数字也不适用于:"2aA1b%%sdf3123!!">> True 当它应该为假时。

标签: ruby

解决方案


您可以使用包含三个积极前瞻的正则表达式来做到这一点:

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)

如果您只希望字符串包含字母数字字符,请添加

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

或放在\A\p{Alnum}+\z正则表达式的末尾。


推荐阅读