如何在正则表达式中检查字符串长度


How to check string length in regex

我是正则表达式的新手,并试图编写一行代码来匹配

  1. 字符串不应以数字开头。( 确定 )
  2. 字符串中应只有字母、数字、破折号和下划线。( 确定 )
  3. 字符串长度应介于 5 和 25 之间(失败)
规则

1 和 2 正常工作,但规则 3 无法正常工作。

有什么帮助可以修复它吗?

这是我的代码:

$arr = [
    '-foobar',
    'foobar',
    '32-xx',
    'xx23',
    'A2l',
    '2aAA',
    '_a2d',
    '-A22',
    '-34x',
    '2--a',
    'a--a-'
];
foreach( $arr as $a ){
    echo check( $a );
}
function check($string){
    if (preg_match("/^[a-zA-Z]+([a-zA-Z0-9_-]?){5,25}$/", $string)) {
        return "$string ---------------> match was found.<br />";
    } else {
        return "$string ---------------> match was not found.<br />";
    }
}

不需要在第一个字符类上使用量词+。那只是应该检查第一个数字。然后,您不需要第 2 个字符类?量词。并且范围应该是{4,24}而不是{3,25}.此外,您可以从那里删除不必要的捕获组。

因此,将您的正则表达式修改为:

/^[a-zA-Z][a-zA-Z0-9_-]{4,24}$/