PHP:preg_match长度限制

时间:2013-10-17 09:14:19

标签: php regex preg-match

我使用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”,则会显示“Valid!”。该值必须包含字母和数字,以及5-15个字符。

3 个答案:

答案 0 :(得分:10)

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

因此(?=.*[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

答案 1 :(得分:6)

在正则表达式中使用行开头和行尾锚点以及正确的字符类:

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

你的正则表达式:/[a-z]+[0-9]/实际上会匹配一个或多个英文字母,然后是一个数字。

答案 2 :(得分:0)

试试这个:

<?php

 $str = your string here

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

?>