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

常に正規表現を避けるようにしてください。読みにくく、デバッグしにくいため、スタイルが悪いです。とにかくそれほど短くはありません:

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 に答える
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 に答える
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 に答える