REGEX -检查以确保字符串至少包含两位数字、两个非字母数字字符和两个字母?[closed]

ulydmbyx  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(125)
    • 已 关闭 * * 。 此 问题 需要 更多 focused 。 当前 不 接受 答案 。
    • 想要 改进 此 问题 吗 ? * * 更新 问题 , 使 其 仅 关注 editing this post 的 一 个 问题 。

昨天 关门 了 。
Improve this question 格式
我 不是 很 擅长 正则 表达式 , 我 试 过 使用 正则 表达式 生成 器/调试 器 , 但 我 似乎 不能 弄 清楚 。 基本 上 , 我 想 检查 并 确保 任何 给定 的 字符 串 具有 :

  • 至少 两 个 数字 0 - 9 . 两者 ( 或 两者 以上 ) 可以 出现 在 字符 串 的 任何 地方 , 并且 两者 可以 相同 + 或 不同 , 只要 字符 串 中 至少 有 两 个 包含 。
  • 至少 两 个 非 字母 数字 字符 ( ! , * , $, # , 键盘 上 除 字母 和 数字 之外 的 任何 字符 , 因为 这些 字符 需要 单独 检查 ) 。 两者 ( 或 两者 以上 ) 可以 出现 在 字符 串 中 的 任何 位置 , 并且 可以 是 相同 的 + 或 不同 的 , 只要 字符 串 中 至少 包含 两 个 字符 。
  • 至少 一 个 大写 字母
  • 至少 一 个 小写 字母
  • 不能 包含 任何 空白 字符
  • 不 应 在 字符 串 中 的 WHERE 上 区分 任何 给定 字符 , 只要 每个 TYPE 字符 至少 出现 两 次 。

我 似乎 找 不到 任何 在 互联 网 上 , 以 这个 确切 的 事情 。 而且 , 这 将 是 一 个 奖金 是 这 检查 , 以 确保 字符 串 是 至少 8 个 字符 长( 因为 这 是 用于 密码 验证 ) , 但 由于 更改 文本 框 颜色/错误/等 , 我 还是 要 手动 检查( 例如 , 少于 8 个 字符 的 密码 将 使 框 变为 红色 , 如果 大于 8 但 少于 16 个 字符 , 则 框 变为 黄色 ,基本 上 , 我 构建 了 一 个 两 步 验证 ( 表单 提交 之前 和 之后 , 之前 部分 主要 是 在 用户 提交 包含 无效 数据 的 表单 之前 进行 检查 以 警告 用户 ) 。

mctunoxg

mctunoxg1#

您可以对所有要求使用积极的观察头:

^(?=.*\d.*\d)(?=.*[^A-Za-z0-9].*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])\S+$

此正则表达式模式表示要匹配:

  • ^(从字符串开头算起)
  • (?=.*\d.*\d)Assert存在两个(或更多)数字
  • (?=.*[^A-Za-z0-9].*[^A-Za-z0-9])Assert两个符号
  • (?=.*[A-Z])声明至少一个大写字母
  • (?=.*[a-z])Assert至少一个小写字母
  • \S+匹配一个或多个非空白字符
  • $字符串结尾

下面是一个正则表达式演示:

var valid = "#AaBb12$";
var invalid1 = "Aa12$ Z";
var invalid2 = "Aa$";
var re = /^(?=.*\d.*\d)(?=.*[^A-Za-z0-9].*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])\S+$/;
console.log(re.test(valid));
console.log(re.test(invalid1));
console.log(re.test(invalid2));

相关问题