【问题标题】:JavaScript Regular Expression OR OperatorJavaScript 正则表达式 OR 运算符
【发布时间】:2015-02-03 09:57:14
【问题描述】:

在 Twitter 上看到了一个挑战,所以我一直在努力克服它,当然我在正则表达式方面并不是最擅长的。这是我目前所拥有的:

var pass_regex = new RegExp(/^[a-z][A-Z][0-9]|[!@#$%^&*()_]+$/);

我正在尝试匹配包含以下内容的密码输入:

  • 1 个小写字母
  • 1 个大写字母
  • 1 位数字或特殊字符

我被卡住的地方是“或”部分,我认为 [0-9] 和我的特殊字符集之间的管道分隔符会起作用,但似乎不起作用。试图更好地理解如何使用正则表达式来检查 1 位数字或 1 个特殊字符。提前感谢您提供的任何帮助。

【问题讨论】:

  • 你的意思是至少一个还是正好一个。
  • 挑战的确切说明是“密码必须至少包含一个小写字符、一个大写字符和一个数字或特殊字符。”
  • 为了可读性和可维护性,建议在单独的单元中编写规则。 passwd.match(/[a-z]/) && passwd.match(/[A-Z]/) && ( passwd.match(/0-9/) || passwd.match(/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/) )

标签: javascript regex


【解决方案1】:

至少一个:

您需要使用基于正则前瞻的正则表达式来检查多个条件。

^(?=.*?[A-Z])(?=.*?[a-z]).*?[\W\d].*

^(?=.*?[A-Z])(?=.*?[a-z]).*?[!@#$%^&*()_\d].*
  • (?=.*?[A-Z]) 断言必须至少有一个大写字母。
  • (?=.*?[a-z]) 至少一个小写字母。
  • .*? 任意字符零次或多次的非贪婪匹配。
  • 如果满足上述条件,则匹配相应的字符串,并且该字符串必须包含给定列表 [!@#$%^&*()_\d] 中的至少一个字符。此列表中的\d 匹配任何数字字符。
  • .* 匹配以下零个或多个字符。

DEMO

【讨论】:

  • 感谢您抽出宝贵时间帮助我解决这个问题,但是,由于我对 RegEx 不太擅长,因此我很难理解您在上面提供的内容,如果您有时间,请您解释一下?
  • 出于条件检查的目的,最后.* 是不必要的,但操作员说I am trying to match a password input that contains,即他正在尝试匹配整个密码。所以这里.*是必须的:)
  • 感谢您的快速帮助。这是我设置的一个快速测试:var pass_regex = new RegExp(/^(?=.*?[A-Z])(?=.*?[a-z]).*?[!@#$%^&*()_\d].*/); if(!pass_regex.test(password.val())) { alert('Invalid Password'); validated = false; } 但我想知道,密码测试 Az1$ 通过但我试图找出一个 OR 运算符,这意味着它应该包含一个数字或一个特殊字符,而这个 RegEx 似乎无法处理那。有什么想法吗?
  • 使用 var pass_regex = /^(?=.*?[A-Z])(?=.*?[a-z]).*?[!@#$%^&*()_\d].*/m; 。是的,Az1$ 字符串满足上述大写、至少小写和一个数字的条件。所以它匹配了。
  • 这似乎成功了,谢谢。似乎所有改变的只是在末尾添加了“m”字符,对吧?这究竟对更改 RegEx 做了什么?
猜你喜欢
  • 1970-01-01
  • 2012-10-30
  • 2011-01-03
  • 2013-11-18
  • 2014-08-24
  • 2023-03-10
  • 1970-01-01
  • 2014-05-01
相关资源
最近更新 更多