Форма проверки PHP без использования регулярного выражения

#php

#php

Вопрос:

Я работаю с HTML-формой, затем отправляю ее в свой php-скрипт, где я должен проверить, является ли значение из html-формы десятичным. Если нет, php должен напечатать его с помощью echo с красным цветом шрифта и, если это правильно, со стандартным черным шрифтом..

Во-первых, я НЕ МОГУ использовать регулярное выражение, чтобы проверить, является ли оно формально действительным. Есть какие-нибудь подсказки?

Комментарии:

1. если регулярное выражение не может быть использовано, пожалуйста, удалите тег regex

2. Как насчет функции is_numeric() в PHP? php.net/manual/en/function.is-numeric.php

3. Что у вас есть до сих пор? Пожалуйста, добавьте свой код

4. Я попробую использовать ее для десятичной системы счисления. Но также у меня есть другие входные данные: «проверьте, является ли это троичным числом» и «ссылка на атрибут объекта c #»…

5. Итак, добавьте к вашему вопросу, тогда мы сможем вам помочь

Ответ №1:

Есть несколько способов, которыми это может быть достигнуто:

 <?php
$values = [
    '1',
    '1.1',
    '.11',
    'foo'
];

foreach( $values as $value ){
    if( $value > floor($value) ){
        echo '<p>is decimal</p>';
    }else{
        echo '<p style="color:red">not decimal</p>';
    }
}

echo '<hr>';

foreach( $values as $value ){
    if( is_numeric($value) amp;amp; (1 === substr_count($value, '.')) ){
        echo '<p>is decimal</p>';
    }else{
        echo '<p style="color:red">not decimal</p>';
    }
}
  

Первый способ просто сравнивает значение с floor() отредактированной версией самого себя.

В качестве альтернативы, проверяет, соответствует ли значение is_numeric() , затем проверяет, имеет ли строка десятичную дробь.

Редактировать: Изменен второй метод с substr() на substr_count() , как предложил @ArtisticPhoenix, поскольку может быть возможность >= двух десятичных знаков.

Комментарии:

1. Может быть, substr_count($value, '.') == 1 для второго вместо !(false === strpos($value,'.') — я почти сделал ответ с ним, затем понял, что он слишком похож на второй. В любом случае кажется, что false !== strpos($value,'.') было бы более читабельным.