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

时间:2013-10-28 17:58:11

标签: php regex

我是Regular Expression的新手并尝试编写一行代码来匹配

  1. 字符串不应以数字开头。 (好的)
  2. 字符串中只应包含alpha,num,dash和underscore。 (好的)
  3. 字符串长度应在5到25之间(FAIL)
  4. 规则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 />";
        }
    
    }
    

1 个答案:

答案 0 :(得分:5)

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

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

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