-3

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

例子:

  • aab有效_

  • aaa无效_

  • abc有效 _

  • aabbcc有效_

  • aabbbcc无效(bbb )

  • aa22cc有效 _

  • aa222cc无效(222 )

  • xxxxxxxxxxx无效_

  • 111111111无效_

  • xx11xx11有效_

我这样做是为了验证实际

4

2 回答 2

5

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

/(.)\1{2}/

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

if(!preg_match('/(.)\1{2}/', $input)) {
    // "valid"
}
于 2013-01-18T11:16:07.140 回答
0

你有两个要求(似乎):

  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上查看。

于 2013-01-18T11:30:00.573 回答