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

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

Ответ 1

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

Ответ 2

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

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

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

12
-12
12.1

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

Ответ 3

Вы можете использовать ctype_digit

например:

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

Вставить и сравнить:

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

Ответ 8

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

Ответ 9

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

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

Трюк прост. Он передает переменную типа 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 секунд для завершения этого теста!