Я просто хочу знать метод проверки переменной 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
секунд для завершения этого теста!