1

我迷失在使用 strpos() 和 ltrim() 的过程中。有人能帮我解决我的问题吗?我希望页面只接受以“A”或“B”开头的输入,然后紧跟一个整数。如下所示:

A1 = accepted
B1 = accepted
AB = rejected
1A = rejected
1 = rejected
B123 = accepted

我正在使用$_GET,并且 URL 有点像page.php?id=数字实际上来自 MySQL 中的自动增量主键,因此长度会随着条目的添加而变化。

4

4 回答 4

2
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 > 
于 2012-01-26T08:57:02.743 回答
2

您应该始终尽量避免使用正则表达式。这是一种糟糕的风格,因为它难以阅读且难以调试。无论如何,它并没有那么短:

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
    }
}
于 2012-01-26T09:05:00.113 回答
0
$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';
}
于 2012-01-26T08:55:18.860 回答
0
if (preg_match('/^([AB][0-9])/', $yourstring) > 0)
{
    // valid input
}
于 2012-01-26T08:58:31.650 回答