PHP - проверка десятичных знаков с помощью NumberFormatter - PullRequest
0 голосов
/ 07 мая 2020

Приложение, над которым я работаю, принимает десятичные числа от пользователей не на английском языке sh, в основном Dani sh.

Код для проверки чисел выглядит следующим образом:

$fmt = new NumberFormatter($locale, NumberFormatter::DECIMAL);
$amount = $fmt->parse($input);
if ($amount === false) {
    echo "There has been an error with the number {$input}";
}

Это отлично работает, поскольку выдает ошибки для строк и принимает десятичные числа. Моя проблема с NumberFormatter заключается в том, что, например, "12,34 ,,,, 5,34" принимается и форматируется как 12,34

. Теперь "12,34 ,,,, 5,34" не является десятичным. номер, его следует отклонить. Я пробовал комбинировать это с is_numeric(), но is_numeric() отклоняет как "" 12,34 ,,,, 5,34 ", так и 12,34.

Мой вопрос: есть ли способ сделать NumberFormatter отклонить "12,34 ,,,, 5,34", так как это не число c ??

1 Ответ

1 голос
/ 07 мая 2020

NumberFormatter не предназначен для использования в качестве проверки ввода. Вместо этого вы можете попробовать методы filter_var / filter_input:

<?php

setlocale(LC_ALL, 'de_DE');

$options = [
    'options' => [
        'decimal' => \localeconv()['decimal_point'],
    ],
];

$input = '10,0205,,04';
var_dump(
    filter_var($input, FILTER_VALIDATE_FLOAT, $options)
);
# bool(false)

$input = '10,0205';
var_dump(
    filter_var($input, FILTER_VALIDATE_FLOAT, $options)
);
# float(10.0205)

Надеюсь, я смогу помочь

/ Flo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...