正则表达式至少匹配m组中的n个
Regular Expression matching at least n of m groups
本文关键字:正则表达式 更新时间:2023-09-26
我将编写一个正则表达式,它只在字符串包含至少n个不同类型的字符时才匹配。我打算用它来强制我的用户创建强密码,并希望检查密码是否包含以下至少3个:
- 字符
- 资本字符 数字特殊字符
使用查找头编写一个匹配所有这些类的正则表达式是微不足道的。然而,我无法理解"至少3"的部分。这是否有可能(在一个漂亮的、紧凑的表达式中),或者我是否必须创建一个怪物表达式?
我认为这将比列出4个中的3个可能的组合更紧凑。它利用负向前看来确保整个字符串不是仅由您列出的一个或两个字符类组成:
(?!([a-zA-Z]*|[a-z'd]*|[^A-Z'd]*|[A-Z'd]*|[^a-z'd]*|[^a-zA-Z]*)$).*
按顺序排列:
- 下限和/或上限
- 小写和/或数字
- 较低和/或特殊
- 大写和/或数字
- 上部和/或特殊
- 数字和/或特殊
如果整个字符串(因为负向前看中的$
)只包含上述任何组的字符,则此正则表达式将失败。
您必须为4个表达式中的3个(总共4个表达式)的每种可能组合编写一个表达式,然后将单个表达式放在一起,以便如果它们满足至少一个原始表达式,则它们通过。
您觉得这个解决方案怎么样?
var str='23khkS_s';
var countGroups=0;
if(str.match(/[a-z]+/))
countGroups++;
if(str.match(/[A-Z]+/))
countGroups++;
if(str.match(/[0-9]+/))
countGroups++;
if(str.match(/[-_!@#$%*'(')]+/))
countGroups++;
console.log(countGroups);
您可以使用4个小正则表达式,而不是使用1个怪物式表达式。然后使用变量countGroups
,它包含了多个匹配的字符组。希望对大家有所帮助
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 用于验证JS中逻辑运算符表达式的正则表达式