我迷失在使用 strpos() 和 ltrim() 的过程中。有人能帮我解决我的问题吗?我希望页面只接受以“A”或“B”开头的输入,然后紧跟一个整数。如下所示:
A1 = accepted
B1 = accepted
AB = rejected
1A = rejected
1 = rejected
B123 = accepted
我正在使用$_GET
,并且 URL 有点像page.php?id=
数字实际上来自 MySQL 中的自动增量主键,因此长度会随着条目的添加而变化。
php > $pattern="/^[A|B]\d+$/";
php > echo preg_match($pattern,"A1",$matches); print_r($matches);
1Array
(
[0] => A1
)
php > echo preg_match($pattern,"B1",$matches); print_r($matches);
1Array
(
[0] => B1
)
php > echo preg_match($pattern,"1A",$matches); print_r($matches);
0Array
(
)
php >
您应该始终尽量避免使用正则表达式。这是一种糟糕的风格,因为它难以阅读且难以调试。无论如何,它并没有那么短:
preg_match("/^[A|B]\d+$/", $i, $m); if (count($m) > 0) {}
if ($i[0] == 'A' || $i[0] == 'B') && is_numeric(substr($i, 1)) {}
完整代码:
if (isset($_GET['id']))
{
$id = $_GET['id'];
// A or B and the rest a number
if (($id[0] == 'A' || $id[0] == 'B') && is_numeric(substr($id, 1)))
{
// accepted
}
}
$id = isset($_GET['id']) ? ltrim($_GET['id']) : null;
if( $id && ($id[0]=='A'||$id[0]=='B') && is_numeric(substr($id,1)) ){
echo 'accepted';
}else{
echo 'rejected';
}
if (preg_match('/^([AB][0-9])/', $yourstring) > 0)
{
// valid input
}