Каков наилучший способ проверить определенный ввод в php и продолжить, если он соответствует требуемому формату? - PullRequest
1 голос
/ 26 января 2012

Я заблудился в использовании strpos () и ltrim (). Кто-нибудь сможет помочь мне с моей проблемой? Я бы хотел, чтобы страница принимала только те входные данные, которые начинаются с «A» или «B», за которыми сразу же следует целое число. Как следующее:

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

Я использую $_GET, а URL похож на page.php?id= Числа на самом деле взяты из первичного ключа с автоинкрементом в MySQL, поэтому длина будет меняться при добавлении записей.

Ответы [ 4 ]

2 голосов
/ 26 января 2012

Вы всегда должны стараться избегать регулярных выражений.Это плохой стиль, потому что его трудно читать и отлаживать.В любом случае это не намного короче:

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
    }
}
2 голосов
/ 26 января 2012
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 > 
0 голосов
/ 26 января 2012
if (preg_match('/^([AB][0-9])/', $yourstring) > 0)
{
    // valid input
}
0 голосов
/ 26 января 2012
$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';
}
...