javascript正则表达式需要至少一个字母,一个数字,并防止添加某些单词

时间:2017-07-11 14:55:56

标签: javascript regex regex-negation

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

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]

的顺序

任何帮助非常感谢

谢谢!

1 个答案:

答案 0 :(得分:2)

在您的示例中,负向前瞻仅在字符串的开头处不允许function isPalindrome(s) { s=s.toLowerCase().match(/\w/g); return s.join()==s.reverse().join(); }。只需将.*?添加为joker即可禁用字符串中的任意位置,并在需要时使用word boundaries \b

example
  • /^(?!.*?example)(?=\D*\d)[^a-z]*[a-z].*$/i 首先要在行中的任何地方禁止(?!.*?example)
  • example秒前瞻需要任意数量的(?=\D*\d)非数字后的数字。
  • \D匹配任意数量的non - 字母字符,直到字母为止。

See demo at regex101

实际上你只需要两个前瞻来独立于条件。一个用于所需的数字,一个用于单词。字母的要求可以在模式内完成。

Lookarounds是在某个位置触发的零长度断言。