как проверить, содержит ли переменная 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";
}
Cast и сравниваем:
function string_contain_number($val)
{
return ($val + 0 == $val) ? true : false;
}
предполагая, что вы хотите только (и только) действительные целые числа, и вы не хотите, чтобы пользователи испортили ваши данные и базу данных с 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
секунды, чтобы завершить этот тест!