javascript regex 至少需要一个字母,一个数字并防止添加某些单词

Posted

技术标签:

【中文标题】javascript regex 至少需要一个字母,一个数字并防止添加某些单词【英文标题】:javascript regex requiring at least one letter, one number and prevents from adding certain words 【发布时间】:2017-12-15 17:21:39 【问题描述】:

我正在尝试修改我的正则表达式,它要求用户输入至少一个字母和一个数字,如下所示:

new RegExp('^(?=.*[a-z])(?=.*[0-9]).+$')

我想防止用户在@之前使用某些词,例如电子邮件地址部分。

所以我们假设电子邮件地址是example@example.com

我想强制用户使用其中不包含example 的字符串(字符串的任何部分)

这是我目前所拥有的:

\b(?:(?!example)\w)+\b

但它并没有真正强制用户使用至少一个字符和一个数字。

当我试图限制它时,我会得到这样的结果:

\b(?:(?!example).*[a-z].*[0-9])+\b

但现在字符串必须遵循example 然后[a-z] 然后[0-9] 的顺序

非常感谢任何帮助

谢谢!

【问题讨论】:

我希望 example 出现在文本中的任何位置,因此您的正则表达式似乎可以解决问题。如果您将其写为答案,我会将其标记为已接受的答案。谢谢! 不客气!很高兴它有帮助。 【参考方案1】:

在您的示例中,负前瞻仅在字符串开头不允许example。只需将.*? 添加为小丑即可在字符串中的任何位置禁止该单词,并在需要时使用word boundaries \b

/^(?!.*?example)(?=\D*\d)[^a-z]*[a-z].*$/i
(?!.*?example) first lookahead 不允许 example 在行中的任何位置 (?=\D*\d) 第二个前瞻要求在任意数量的 \D 非数字之后有一个数字。 [^a-z]*[a-z] 匹配任意数量的non-字母字符,直到字母。

See demo at regex101

实际上,您只需要两个前瞻即可独立于条件。一个用于所需的数字,一个用于单词。字母的要求可以在图案里面完成。

Lookarounds 是在特定位置触发的零长度断言。

【讨论】:

以上是关于javascript regex 至少需要一个字母,一个数字并防止添加某些单词的主要内容,如果未能解决你的问题,请参考以下文章

至少需要一个字母字符

R REGEX匹配-至少1个小写字母,1个数字,并且没有8个长度的特殊字符[重复]

javascript 字母数字字符#regex

javascript 字母数字字符#regex

RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +

Regex-创建验证以强制一个字符串包含2个以上的单词