10

preg_match('/[a-z]+[0-9]/', strtolower($_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”,它将显示“有效!”。该值必须同时包含字母和数字,并且介于 5-15 个字符之间。

4

3 回答 3

14

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

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

(?=.*[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!!!';
}

Online regex demo

于 2013-10-17T09:35:37.930 回答
9

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

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

您的 regex:/[a-z]+[0-9]/实际上会匹配 1 个或多个英文字母,然后是单个数字。

于 2013-10-17T09:16:27.607 回答
1

尝试这个 :

<?php

 $str = your string here

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

?>
于 2013-10-17T09:18:32.897 回答