【问题标题】:to detect at least three letter or number regexp检测至少三个字母或数字正则表达式
【发布时间】:2013-01-18 11:11:17
【问题描述】:

我需要一个RegExp代码如下:3个字母或数字再并排,不超过

例子:

  • aab 有效

  • aaa无效

  • abc 有效

  • aabbcc 有效

  • aabbbcc 无效 (bbb)

  • aa22cc 有效

  • aa222cc 无效 (222)

  • xxxxxxxxxxx无效

  • 111111111无效

  • xx11xx11 有效

我这样做是为了验证实际

【问题讨论】:

  • 至少尝试完成这个问题。
  • 不应该aabbbaa无效吗?
  • @DMK:是的,原来的问题实际上是这样写的。
  • @Jon - 那是我的错。

标签: php regex validation


【解决方案1】:

如果要确保不超过两个连续的相同字符,可以使用backreference:

/(.)\1{2}/

此表达式将匹配后面跟有两个自身副本的任何字符。因此,为确保没有三字符重复,请检查正则表达式不匹配:

if(!preg_match('/(.)\1{2}/', $input)) {
    // "valid"
}

【讨论】:

  • 但是它不检查字符串是否只包含数字和字母。
  • @TimPietzcker:没有示例输入可以揭示这样的要求,所以我没有包含它。阅读问题的另一种方式是允许三个相同字符的运行除非该字符是字母或数字。确实措辞不好,所以我只是举例说明。
  • @TimPietzcker:我认为工作正常。看看请。 rubular.com/r/WieqpnUIDh
  • @merakli:嗯,你的问题表明你不想匹配john..delo,因为它包含字母/数字以外的字符。我很确定这就是为什么您收到这么多反对票的原因(顺便说一下,不是我):您的问题含糊不清且不完整,您没有明确说明您的要求,并且您没有明显的努力来解决问题。
  • 如何用javascript写这个验证? } Else if (username.match (/ (.) \ 1 {2} /)) { 此代码不起作用
【解决方案2】:

你有两个要求(看起来):

  1. 确保字符串仅包含 ASCII 数字和字母。
  2. 确保不超过两个连续的相同字母。

这就是你的做法:

if (preg_match(
    '/^         # Start of string
    (?!         # Assert that it is not possible to match...
     .*         # any string,
     (.)        # followed by any character
     \1{2}      # which is repeated twice.
    )           # (End of lookahead)
    [a-z0-9]*   # Match a string that only contains ASCII letters and digits
    $           # until the end of the string.
    \Z/ix',     # case-insensitive, verbose regex
    $subject)) {
    # Successful match
    }

在regex101 上查看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多