2013-10-17 374 views
3

我使用preg_match('/[a-z]+[0-9]/', strtolower($_POST['value']))来检查字符串是否包含字母和数字。我如何改变它只允许5〜15个字符?PHP:preg_match长度限制

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

UPDATE 现在我想:

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

else { 
    echo 'NOOOOO!!!'; 
} 

如果我输入的输入字段,它会说 “dfgdfgdfg” “有效!”。该值必须包含字母和数字,并且包含5-15个字符。

+0

5-15个字符?你的意思是数字? – putvande

+0

我希望这不是施加密码“强度”...... – HamZa

+0

添加一些正确的字符串和不正确的 – Suic

回答

8

的技巧是使用一个积极的前瞻,以及在这种情况下,你需要两个。因此(?=.*[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

+2

爱你的男人,thx很多! :d – Treps

6

使用线起点和行结尾与您正则表达式正确的字符类:

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

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

+0

检查更新后的问题。 :) – Treps

+2

对不起,我不得不去一些工作,并不能出席你编辑的问题,虽然很高兴你从@HamZa得到了一个很好的答案 – anubhava

0

试试这个:

<?php 

$str = your string here 

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

?> 
+0

@HamZa:谢谢我纠正它 –

+0

检查更新的问题。 :) – Treps