как проверить, содержит ли переменная PHP номера?

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

9 ответов


Если вы хотите, чтобы значение содержало только числа, вы можете использовать ctype_digit().


можно использовать ctype_digit

например:

if (!ctype_digit($myString)) {
    echo "Contains non-numbers.";
}

можно использовать is_numeric() :

if ( is_numeric($_POST['foo']) ) {
    $foo = $_POST['foo'];
} else {
    // Error
}

Это проверит, что значение является числовым, поэтому оно может содержать что-то еще, кроме цифр:

12
-12
12.1

но это гарантирует, что значение будет действительное число.


вернет true если в строке нет чисел. Он обнаруживает буквы, пробелы, вкладки, новые строки, все, что не является числами.

preg_match('#[^0-9]#',$variable)

это проверит, является ли входное значение числовым или нет. Надеюсь, это поможет

if(!preg_match('#[^0-9]#',$value))
{
    echo "Value is numeric";
}
else
{
    echo "Value not numeric";
}

PHP имеет функцию is_numeric () что может быть то, что вы ищете.


Cast и сравниваем:

function string_contain_number($val)
{
     return ($val + 0 == $val) ? true : false;
}

if(!ctype_digit($string))
    echo 'The string contains some non-digit'

предполагая, что вы хотите только (и только) действительные целые числа, и вы не хотите, чтобы пользователи испортили ваши данные и базу данных с hexadecimal или binary или любая другая форма чисел, то вы всегда можете использовать этот метод:

if(((string) (int) $stringVariable) === $stringVariable) {
    // Thats a valid integer :p
}
else {
    // you are out of luck :(
}

секрет прост. Он приводит переменную типа string к целочисленному типу, а затем возвращает ее обратно в string. Супер быстрый, супер простой.

для тестирования я подготовил тест:

'1337' is pure integer.
'0x539' is not.
'02471' is not.
'0000343' is not.
'0b10100111001' is not.
'1337e0' is not.
'not numeric' is not.
'not numeric 23' is not.
'9.1' is not.
'+655' is not.
'-586' is pure integer.

единственное место, где это метод не дотягивает до отрицательных чисел, поэтому вам нужно проверить, что рядом с этим (используйте ((string) (int) $stringVariable) === $stringVariable && $stringVariable[0] !== "-").

теперь я думал, что preg_match способ является лучшим. но в любом проекте, который имеет дело с пользователями, скорость является важным фактором. поэтому я подготовил бенчмаркинг-тест, сделав это выше теста для 500,000 раз, и результаты были потрясающими:

мой собственный изобретенный метод взял только:
6.4700090885162
секунд по сравнению с preg_match где взял:
77.020107984543 секунды, чтобы завершить этот тест!