PHP Разрешить только цифры с 2 десятичными знаками

Мне нужна функция, чтобы проверить, если число имеет 2 десятичных знака или нет.

Например:

$number = '1.00'; // Valid
$number2 = '1'; // Not valid
$number3 = '1.000' //Not valid

1

Решение

Regex может быть решением, так как ваши числа объявлены как строки.

Код:

<?php
$re = "/(\d\.\d{2})(?!\d)/";
$array_input = array('1.00', '1', '1.000');

foreach($array_input as $row)
{
if(preg_match($re, $row, $matches) == 0)
echo $row . " isn't a valid value with 2 decimals only. <br>";

else
echo $row . " is valid. <br>";
}
?>

Выход :

1.00 is valid.
1 isn't a valid value with 2 decimals only.
1.000 isn't a valid value with 2 decimals only.
1

Другие решения

Вы можете проверить это так:

$str = "1.23444";
print strlen(substr(strrchr($str, "."), 1));

Вам придется преобразовать вашу переменную в строку, но это не большая проблема. Сделай так:

$d = 100.0/81.0;
$s = strval($d);
2

Почему бы вам не просто заставить их иметь 2 десятичных знака, используя что-то вроде этого

$original = 2;
$float = number_format($number, 2);
// echo $float = 2.00

Я предполагаю, что если вам нужно обеспечить, чтобы число с плавающей точкой содержало только 2 десятичных знака, вы могли бы сделать что-то вроде следующего.

$numbers = array(2.453, 3.35, 2.53, 1.636);
foreach($numbers as $number) {
if(strpos($number, '.') !== false) {
if(strlen($parts[1]) == 2) {
echo $number .' is valid!';
} else {
echo $number .' is NOT valid!';
}
}
}

Выше приведен один из способов сделать это, но есть много других. Вы можете использовать array_map или array_filter, и вы также можете использовать математику, например:

$numbers = array(2.453, 3.35, 2.53, 1.636);
$valid_numbers = array_filter($numbers, function($number) { return strlen($number) - strpos($number, '.');
1

Вы можете сделать что-то вроде этого:

if(strlen(substr(strrchr($number, "."), 1)) == 2){
echo "valid";
}else{
echo "not valid";
}
1
function check_decimals($input, $number_of_decimals)
{
if(strlen(substr(strrchr((string)$input, "."), 1)) == $number_of_decimals)
{
return TRUE;
}
else {
return FALSE;
}
}

check_decimals("1.000", 2);
1

Это может быть решение с использованием preg_match_all

$re = "/^\\d+(?:\\.\\d{2})?$/m";
$str = "1.00\n13333.55\n1.000";

preg_match_all($re, $str, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';

REGEX: https://regex101.com/r/nB7eC4/1

КОД: http://codepad.viper-7.com/49ZuEa

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector