2013-05-12 30 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 
}