ruby - 有没有办法在 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 当它应该为假时。
解决方案
您可以使用包含三个积极前瞻的正则表达式来做到这一点:
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
正则表达式的末尾。
推荐阅读
- gis - 如何使用 arcgis Rest API 设置流程?
- php - Laravel,如何将密码重置为用户表中重复的电子邮件
- laravel - 如果数组大小很大,则无法在会话中存储数组 laravel 6
- plot - 无法使用散景 BoxSelectTool 访问选择
- python - Visual Studio Code 的调试器和 pipenv
- javascript - 如何通过 React 中的 api 数据进行映射?
- javascript - 如何使排行榜滑块横幅响应?
- javascript - 如何将图像添加到
标签来自 - javascript - 开玩笑:如何用期望值的子集测试 console.log haveBeenCalled?
- python-3.x - 是否需要提供 access_key 和 secret_key 才能在 lambda 函数中从 s3 访问对象?