Как проверить и посмотреть, вводит ли пользователь только числа и длиной не менее 4 чисел, используя PHP?Вопрос о проверке PHP
ответ
Вы можете использовать регулярное выражение:
/^\d{4,}$/
Пример использования:
$s = "7325";
if (preg_match('/^\d{4,}$/', $s)) {
echo "matches";
}
Который вы можете проверить с помощью 'preg_match()' –
@Alexandre Jasmin, спасибо :) – TaG
@Alexandre: Хорошо. Я добавил примерный код. –
У вас есть пример кода, чтобы начать?
Чтобы строго ответить на ваш вопрос, вы можете использовать регулярное выражение, например if(preg_match('/^\d{4,}$/', $input)...
.
Но здесь еще многое нужно рассмотреть: вам нужно рассмотреть как проверку, так и фильтрацию (и лучше всего сохранить две отдельные проблемы). Если вы строго проверяете целое число, то я полагаю, что вы в безопасности от SQL-инъекций, XSS и т. Д., Но вам действительно нужно иметь дескриптор этих проблем, потому что рано или поздно вам нужно будет фильтровать & проверять что-то, отличное от простого целого.
intval ('0000') равно 0, что будет недействительным для вас, даже если это четыре цифры и имеет длину 4 или больше. – notJim
предложение Марка Байерс это хорошо, но вот еще один способ:
$valid = ctype_digit($number) && strlen($number) >= 4;
Мне это нравится, потому что (как и у Марка) '0123' соответствует условию, а механизм регулярных выражений не используется. – webbiedave
@notJim, ты выиграл мой голос, потому что ты самый результативный :) –
ctype_digit() & & StrLen() выигрывает
<?php
function benchmark($callback){
echo sprintf('%-30s: ', $callback);
$t = microtime(true);
foreach(range(1, 10000) as $n){
call_user_func($callback);
}
echo (microtime(true)-$t)."\n";
}
function mark_byers_preg_match(){
$s = "7325";
preg_match('/^\d{4,}$/', $s);
}
function notjim_ctype_digit_strlen(){
$number = 7325;
ctype_digit($number) && strlen($number) >= 4;
}
function tomalak_intval_broken(){
$check = 7325;
intval($check) == $check && $check >= 1000 && $check <= 9999;
}
benchmark('mark_byers_preg_match');
benchmark('notjim_ctype_digit_strlen');
benchmark('tomalak_intval_broken');
?>
Результаты
mark_byers_preg_match : 0.029040098190308
notjim_ctype_digit_strlen : 0.026585817337036
tomalak_intval_broken : 0.019872903823853
Примечание: @ Томалак не делает т работа с числами, начиная с 0
поэтому не квалифицируется
Edit: @ раствор kiethjgrant был удален из-intval(0000)
вычисляется как false
, когда он должен быть true
.
с номерами рядом, победителей нет. Кроме того, поскольку OP сказал, это пользовательский ввод, все входные данные будут строками. – Gordon
Я ценю усилия, но это мать всех бессмысленных, преждевременных микрооптимизаций. – notJim
@notJim, как «мать всех бессмысленных» и «преждевременных», являются спорными точками. Иногда результаты сильно различаются, и для копирования/вставки решений в скрипт потребовалось около 2 минут. Какой вред? –
вы должны всегда использовать наиболее эффективный способ сделать это
if (is_numeric($imput) && isset($input[3]))
{
// your code
}
Исеть() является языковой конструкцией, которая всегда быстрее, чем StrLen().
isset ($ input [n-1]) сообщает вам, имеет ли строка (данные, которая проходит через форму всегда строка) имеет как минимум n длинных.
is_numeric() проверяет, что это допустимая строка num.
Я думаю, что это лучше, чем ctype_digit() & & strlen().
is_numeric проверяет гораздо больше, чем цифры. – OIS
- 1. Вопрос о проверке MVC
- 2. Вопрос о проверке данных формы PHP
- 3. вопрос о проверке подлинности форм
- 4. Вопрос о проверке нулевых значений
- 5. еще вопрос о проверке jquery
- 6. Вопрос о проверке состояния класса флажка
- 7. Вопрос о проверке XML с использованием XSD
- 8. Вопрос о проверке NerdDinner с использованием VB.Net
- 9. Вопрос о проверке Grails на многодоменной ассоциации?
- 10. вопрос о JQuery рядной формы проверке
- 11. Вопрос о проверке электронной почты RegEx
- 12. Вопрос о проверке модели веб-API
- 13. Вопрос о разрешении области PHP PHP Вопрос
- 14. Вопрос о наследовании Php
- 15. Простой вопрос о PHP
- 16. Вопрос о дезинфекции PHP
- 17. php - вопрос о preg_match
- 18. Вопрос о функциях PHP
- 19. Вопрос о целых (PHP)
- 20. Вопрос о синтаксисе PHP
- 21. Вопрос о локализации PHP
- 22. Вопрос о области PHP
- 23. Вопрос о кодировании PHP
- 24. Вопрос о наследовании PHP
- 25. Вопрос о; в PHP
- 26. Вопрос о производительности PHP
- 27. PHP: вопрос о preg_replace()
- 28. Вопрос о дезинфекции PHP
- 29. Сообщение о проверке PHP, появившееся в заголовке
- 30. PHP Api - вопрос/вопрос о массиве
Прежде всего, напишите свой код; http://www.php.net - отличная ссылка. –
@TaG, это кажется немного неуместным. –
Люди RTFQ! По некоторым причинам много небрежных ответов на этот вопрос. – notJim