Как проверить 17 цифр в массиве номеров VIN из формы в php?

У меня есть следующий код проверки, который запускается после отправки моей формы:

foreach ($_POST['vin']) as $vin_value ) { if(strlen($vin_value) != 17) { echo "VIN is not 17 digits"; echo "VIN is " . strlen($vin_value) . " digits"; echo "VIN value is: " . $vin_value; } else { mail($admin_email, "Auto Quote Request", $email_body); echo "Thank you for contacting us!"; } } 

Я пытаюсь убедиться, что отдельный vin ($ vin_value) моего массива vin [] составляет ровно 17 цифр. Прямо сейчас, когда я отправляю форму, сообщение не отображается вообще. Что тут происходит?? И я понимаю, что этот код просто проверяет символы, а не цифры. Благодарю.

html ввод формы:

 <div class="form-group"> <label for="inputVIN" class="col-lg-2 control-label">Vehicle Identification Number</label> <div class="col-lg-10"> <input class="form-control" id="inputVIN" placeholder="Must be 17 digits." type="text" name="vin[]"> </div> </div> 

Вход представляет собой массив. Это должно учитывать возможность множественных чисел вин. Существует возможность добавить другое поле формы с именем vin []. Все входные данные, относящиеся к этому вопросу, имеют имя = "vin []". Чтобы повторить, сначала есть одна группа форм с именем = vin [], но пользователь может нажать кнопку, чтобы добавить больше. Вот почему я использую массив в первую очередь. Поэтому я хочу, чтобы каждый элемент массива ($ vin_value) содержал ровно 17 символов. Вот почему я использую foreach. Надеюсь, это обеспечит достаточный контекст.

Я бы предположил, что значение $vin является массивом, null или undefined, и поэтому вызов функции strlen($vin) возвращается каждый раз.

см. документацию для strlen здесь

Чтобы отладить значения, измените код на следующий:

 if(strlen($vin) != 17) { echo "VIN is not 17 digits"; echo "VIN is " . strlen($vin) . " digits"; echo "VIN value is: " . $vin; } else { mail($admin_email, "Auto Quote Request", $email_body); echo "Thank you for contacting us!"; } 

редактировать возможное решение номер 2:

strlen () возвращает количество байтов, а не количество символов в строке.

Как было предложено замечанием Чернышевского в стреневых документах, сделайте следующее:

сначала передайте строку через utf8_decode ():

 if(strlen(utf8_decode($vin)) != 17) { echo "VIN is not 17 digits"; echo "VIN is " . strlen(utf8_decode($vin)) . " digits"; echo "VIN value is: " . $vin; } else { mail($admin_email, "Auto Quote Request", $email_body); echo "Thank you for contacting us!"; } 

utf8_decode () преобразует символы, не входящие в ISO-8859-1, в '?', которые с целью подсчета количества символов будут работать.