7

我正在尝试制作一个接受这个的正则表达式:

  • 仅 az、0-9、_ 字符,最小长度为 3
  • admin、static、my 和 www 被拒绝。

对于第一部分,我已经设法做到了:

^[a-zA-Z0-9\\_]{3,}$

但我不知道如何排除前面列出的单词。

例如,这意味着:

  • 不允许使用静态(当然),但是
  • 允许静态
  • 静态是允许的

使用这个正则表达式:

^(?!static|my|admin|www).*$

效果不佳:它排除了静态(以及未经授权的单词之后的所有内容)。

你知道哪个正则表达式适合我的需要吗?

4

2 回答 2

11

尝试这样的事情:

^(?!static$|my$|admin$|www$).*$

这将禁止“static”,但允许“statice”、“statica”等。通过将每个列入黑名单的单词锚定到字符串的末尾,只有当它们单独存在且没有任何尾随字符时,才会匹配它们。

编辑: codeaddict提出了一种更清洁的方法来做基本相同的事情:

^(?!(?:static|my|admin|www)$).*$

于 2011-04-04T15:08:54.507 回答
3

我会回答我的问题以正确回答我的问题(一个包含这两项义务的正则表达式),但我会向 Andrew Hare 提供公认的答案,引导我找到正确的方法:)

方法如下:

  • 仅允许 az、0-9、_ 字符,最小长度为 3
  • 排除 admin、static、my 和 www

这是正则表达式:

^(?!static$|my$|admin$|www$)[a-z0-9\_]{3,}$

或者,正如 Codaddict 提到的那样,使用单端锚:

^(?!(?:static|my|admin|www)$)[a-z0-9\_]{3,}$

希望这对将来有帮助!

于 2011-04-04T15:24:52.950 回答