PHP:preg_匹配长度限制

PHP:preg_匹配长度限制,php,regex,preg-match,Php,Regex,Preg Match,我使用preg_match('/[a-z]+[0-9]/')、strtolower($\u POST['value'])检查字符串是否同时包含字母和数字。如何更改,使其只允许5~15个字符 /[a-z]+[0-9]{5,15}/不起作用 更新 现在我试着: if(preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value']))) { echo 'Valid!'; } else { echo 'NOOOOO!!!'; }

我使用
preg_match('/[a-z]+[0-9]/')、strtolower($\u POST['value'])
检查字符串是否同时包含字母和数字。如何更改,使其只允许5~15个字符

/[a-z]+[0-9]{5,15}/
不起作用

更新 现在我试着:

if(preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value']))) {
    echo 'Valid!';
}

else {
    echo 'NOOOOO!!!';
}

如果我在输入字段中键入“dfgdfgdfg”,它将显示“Valid!”。该值必须同时包含字母和数字,并且在5-15个字符之间。

在正则表达式中使用具有正确字符类的行起始和行结束锚定:

preg_match('/^[a-z0-9]{5,15}$/', strtolower($_POST['value']));
您的正则表达式:
/[a-z]+[0-9]/
将实际匹配一个或多个英文字母,然后匹配一个数字。

尝试以下操作:

<?php

 $str = your string here

 preg_match('/^[a-z0-9]{5,15}$/', $str);

?>

诀窍是使用积极的前瞻,在这种情况下,您需要两个

因此,
(?=.[0-9])
将检查输入中是否至少有一个数字。下一步是什么?您猜对了,我们只需添加
(?=.*[a-z])
。现在让我们将其与的答案合并:

(?=.*[0-9])(?=.*[a-z])^[a-z0-9]{5,15}$
这通常意味着什么

  • (?=.[0-9])
    :检查是否有数字
  • (?=.[a-z])
    :检查是否有字母
  • ^
    :匹配字符串的开头
  • [a-z0-9]{5,15}
    :将数字和字母匹配5到15次
  • $
    :匹配字符串的结尾
从PHP的角度来看,您应该始终检查是否设置了变量:

$input = isset($_POST['value']) ? strtolower($_POST['value']) : ''; // Check if $_POST['value'] is set, otherwise assign empty string to $input

if(preg_match('~(?=.*[0-9])(?=.*[a-z])^[a-z0-9]{5,15}$~', $input)){
    echo 'Valid!';
}else{
    echo 'NOOOOO!!!';
}

5-15个字符?你是说数字?我希望这不是为了强加密码“强度”…添加一些正确字符串和不正确的5-15个字符的示例,包括数字和字母。不,这是用户名。很抱歉,我不得不去做一些工作,不能参加你编辑的问题,不过很高兴你从@HamZa得到了一个好的答案