2013-10-17 263 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