2013-05-12 31 views
0

到目前爲止,我對PHP的最困難的事情是preg_match()模式。我通過一個id變量,以「n」字母或「q」字母開頭,後面有數字。例如需要一個簡單的preg_match()模式PHP

$id = $_POST['id']; 

echo $id; 

output: n123 

現在,我需要不同的功能時,在一定的信是在id標記的前面運行。 如何使用preg_match()完成此操作?我開始的東西...:

$n_pattern = '/n[^0-9]/'; 
$q_pattern = '/q[^0-9]/'; 

但我甚至沒有嘗試一下,因爲我敢肯定,這不是正確的:) BTW,該id數爲1個int和6 INT之間所以我需要把它們全部匹配起來。 (不知道我說的是否正確...假設id可以是1到999999之間的任何數字)。

+0

像'n00000009'這樣的ID是否也被認爲是'好'?或者只有'n9'? – thaJeztah 2013-05-12 13:38:19

+0

不,SQL會自動增加,所以不可能有000000009。 – 2013-05-12 13:41:15

回答

1

你應該將這個正則表達式爲你的對手:

/^[qn]\d{1,6}$/ 

這意味着你的輸入可以是字母q或N替代,接着1至6位開始。

+0

這樣一個單獨的「q」和一個單獨的「n」將是: /^ [n] \ d {1,6)$ /和 /^ [q] \ d {1,6)$ /? – 2013-05-12 13:38:59

+0

是的,這是正確的,你可以簡單地使用'/^n \ d {1,6} $ /'OR'/^q \ d {1,6} $ /'對不起''' – anubhava 2013-05-12 13:40:08

1

另一個簡單的解決方案是檢測第一個字符並驗證第二部分是數字/整數;

$type = $id{0}; // first character of the id (n, q) 
$number = (int) substr($id, 1); // rest of the id 

要驗證「類型」是否正確,您可以使用類似的東西;

if (!in_array($type, array('n', 'q')) { 
    // invalid type 
}