我使用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个字符。
答案 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!!!';
}
答案 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);
?>