PHP preg_match + regex не идентифицирует нечисловой ввод? - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь предотвратить вставку не номеров в мою базу данных, желательно не более 6 цифр. В настоящее время мое регулярное выражение не может найти и выйти из сценария PHP, если введены нечисловые символы, и, следовательно, данные будут вставлены в базу данных. Я не могу понять, почему, как было сказано везде в Интернете, это решение должно быть правильным. Проходящие данные представляют собой массив символов, сформированный из разнесенной строки этих символов, если это поможет.

PHP:

for ($i = 0 ; $i <= $count ; ++$i)
    {
       if (!preg_match("/^\d+$/", $number_array[$i]))
        {
            exit();
        }
        else
        {....

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Без цикла, получить все значения, которые являются числами от 1 до 6 цифр, из массива в другой массив, а затем сравнить с исходным массивом:

if(preg_grep('/^\d{1,6}$/', $number_array) != $number_array) {
    exit;
} else {
    //something
}

Это немного длиннее, но вы также можете отфильтровать значения, которые не являются числами от 1 до 6 цифр, и сравнить с оригиналом:

(array_filter($number_array, function($v) {
                                 return ctype_digit($v) && (strlen($v) < 7);
                             }) != $number_array)
0 голосов
/ 20 июня 2019

Это должно быть регулярное выражение, которое вы хотите, оно соответствует всем строкам чисел от 1 до 6 цифр.

for ($i = 0 ; $i <= $count ; ++$i)
{
   if (!preg_match("/^\d{1,6}$/m", $number_array[$i]))
    {
        exit();
    }
    else
    {....

Так что 156546 будет соответствовать, но это не так.

1565467
156546s
s15654
156546sa
asdfasdfa
...