Как проверить, если переменная PHP содержит не числа? - PullRequest
12 голосов
/ 09 июня 2011

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

Ответы [ 9 ]

16 голосов
/ 09 июня 2011

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

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

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

12
-12
12.1

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

16 голосов
/ 09 июня 2011

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

14 голосов
/ 09 июня 2011

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

например:

if (!ctype_digit($myString)) {
    echo "Contains non-numbers.";
}
8 голосов
/ 09 июня 2011

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

preg_match('#[^0-9]#',$variable)
2 голосов
/ 31 октября 2015

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

if(!preg_match('#[^0-9]#',$value))
{
    echo "Value is numeric";
}
else
{
    echo "Value not numeric";
}
1 голос
/ 20 июля 2017
if(!ctype_digit($string))
    echo 'The string contains some non-digit'
1 голос
/ 09 июня 2011

В ролях и сравните:

function string_contain_number($val)
{
     return ($val + 0 == $val) ? true : false;
}
1 голос
/ 09 июня 2011

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

0 голосов
/ 01 декабря 2016

Если вам нужны только (и только) действительные целые числа, и вы не хотите, чтобы пользователи связывались с вашими данными и базой данных с 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 секунд для завершения этого теста!

...