【问题标题】:regex one dot or one underline validator正则表达式一个点或一个下划线验证器
【发布时间】:2012-05-17 21:07:53
【问题描述】:

这是我的正则表达式

^(([a-z0-9]+)\.([a-z0-9]+)){4,20}$|^(([a-z0-9]+)\_([a-z0-9]+)){4,20}$

它将是一个带有单个点或单个下划线或没有下划线和点的单词。我也希望这个表达式在 4 到 20 个字符之间(它将是 db 中的用户名)

这个正则表达式

^(([a-z0-9]+)\.([a-z0-9]+))$

还有这个

^(([a-z0-9]+)\_([a-z0-9]+))$

工作成功,但我不知道如何限制字符串长度

:(请帮忙

我打算将它与 zend 框架正则表达式验证器一起使用...

【问题讨论】:

    标签: regex validation zend-validate


    【解决方案1】:
    ^(?=[^\._]+[\._]?[^\._]+$)[\w\.]{4,20}$
    

    解释:

    ^            - Start of string
    (?=          - Followed by (not part of match)
      [^\._]+    - Anything but . and _
      [\._]?     - Optional . or _
      $          - End of string
    )
    [\w\.]{4,20} - 4-20 letters, digits, _ and .
    $            - End of string
    

    (?=[^\._]+[\._]?[^\._]+$) 确保字符串包含不超过 1 个._。其余的匹配字符串。

    【讨论】:

    • 我添加了一个解释。另见:regular-expressions.info/lookaround.html
    • 非常小的注释 - 您不需要在字符类中转义句点。
    • @Mike:注意到了。当两者都可以选择时,我更喜欢转义而不是不转义,以防止混淆。
    • 有人可能会争辩说,我想逃避总是一种选择,但我想我理解你的意思。
    • 抱歉来晚了,字符串不必有点或下划线,字符串“foofoo”是有效的,应该匹配。
    【解决方案2】:

    您应该使用第二个验证器来验证长度,而不是在正则表达式中,因为这将提高代码的可读性。将^[a-z0-9]+[._][a-z0-9]+$ 用作带有Regex 验证器的正则表达式,并使用StringLength 验证器检查长度。

    【讨论】:

    • 它可以是这样的,它几乎结束了 :D ^[a-z0-9]+([._]{0,1})[a-z0-9]+$
    • 仅供参考 - 这是该正则表达式的较短版本:^[a-z0-9]+[._]?[a-z0-9]+$(? 相当于 {0,1},不需要括号)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2015-04-24
    • 2016-08-24
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多