【问题标题】:Regular Expression - Exclude list of words for a name正则表达式 - 排除名称的单词列表
【发布时间】:2011-04-04 15:04:12
【问题描述】:

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

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

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

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

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

例如,这意味着:

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

使用这个正则表达式:

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

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

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

【问题讨论】:

  • 这是什么语言?老实说,对于后面的部分来说,某种简单的字符串比较可能会更容易一些。 IE。只是一个简单的if (userName != "admin" && userName != "static" && ... ) (或任何适合特定语言的运算符)。
  • 它应该是在 Java 中,准确地说,在 Play 的 @Match 验证系统中!框架。

标签: java regex list words


【解决方案1】:

试试这样的:

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

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

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

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

【讨论】:

  • +1,或使用单端锚点:^(?!(?:static|my|admin|www)$).*$
【解决方案2】:

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

方法如下:

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

这是正则表达式:

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

或者,正如 Codaddict 所说,使用单端锚:

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

希望这对未来有所帮助!

【讨论】:

    猜你喜欢
    • 2016-05-09
    • 2013-02-28
    • 2017-10-01
    • 2019-04-30
    • 1970-01-01
    • 2021-04-20
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多