PHP는 동적 언어이므로 제공된 필드가 비어 있는지 확인하는 가장 좋은 방법은 무엇입니까?
나는 그것을 보장하고 싶다 :
- null은 빈 문자열로 간주됩니다
- 공백 만있는 문자열은 비어있는 것으로 간주됩니다.
- “0”은 비어있는 것으로 간주되지 않습니다
이것이 내가 지금까지 얻은 것입니다.
$question = trim($_POST['question']);
if ("" === "$question") {
// Handle error here
}
이 작업을 수행하는 더 간단한 방법이 있어야합니까?
답변
// Function for basic field validation (present and neither empty nor only white space
function IsNullOrEmptyString($str){
return (!isset($str) || trim($str) === '');
}
답변
오래된 게시물이지만 누군가가 내가 한 것처럼 필요할 수도 있습니다.)
if (strlen($str) == 0){
do what ever
}
$str
변수로 대체 하십시오.
NULL
를 ""
사용할 때 둘 다 0을 반환 strlen
합니다.
답변
PHP의 empty () 함수를 사용하십시오. 다음은 비어있는 것으로 간주됩니다
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
자세한 내용은 빈 기능 확인
답변
내가 틀렸다면 겸손히 받아 들일 것이지만, 나는 내 자신의 목적으로 테스트했으며 string (0) “”및 NULL 값 변수를 테스트하는 데 다음이 작동한다는 것을 알았습니다.
if ( $question ) {
// Handle success here
}
성공 여부를 테스트하기 위해 되돌릴 수도 있습니다.
if ( !$question ) {
// Handle error here
}
답변
trim()
함수 에서 오 탐지에주의하십시오. 트리밍하기 전에 문자열로 캐스트를 수행하므로 빈 배열을 전달하면 “Array”를 반환합니다. 데이터를 처리하는 방법에 따라 문제가되지는 않지만 제공 한 코드를 사용 question[]
하면 POST 데이터에 이름 이 지정된 필드 가 제공 될 수 있으며 비어 있지 않은 문자열로 나타납니다. 대신, 나는 제안 할 것이다 :
$question = $_POST['question'];
if (!is_string || ($question = trim($question))) {
// Handle error here
}
// If $question was a string, it will have been trimmed by this point
답변
더 좋은 방법은 없지만 일반적으로 수행하는 작업이므로 프로세스를 자동화하는 것이 좋습니다.
대부분의 프레임 워크는 인수 구문 분석을 쉽게 수행 할 수있는 방법을 제공합니다. 당신은 그것을 위해 자신의 객체를 만들 수 있습니다. 빠르고 더러운 예 :
class Request
{
// This is the spirit but you may want to make that cleaner :-)
function get($key, $default=null, $from=null)
{
if ($from) :
if (isset(${'_'.$from}[$key]));
return sanitize(${'_'.strtoupper($from)}[$key]); // didn't test that but it should work
else
if isset($_REQUEST[$key])
return sanitize($_REQUEST[$key]);
return $default;
}
// basics. Enforce it with filters according to your needs
function sanitize($data)
{
return addslashes(trim($data));
}
// your rules here
function isEmptyString($data)
{
return (trim($data) === "" or $data === null);
}
function exists($key) {}
function setFlash($name, $value) {}
[...]
}
$request = new Request();
$question= $request->get('question', '', 'post');
print $request->isEmptyString($question);
심포니는 그런 종류의 설탕을 대량으로 사용합니다.
그러나 “// 여기에서 오류 처리”를 사용하여 그 이상에 대해 이야기하고 있습니다. 데이터를 가져 와서 처리하는 두 가지 작업을 혼합하고 있습니다. 이것은 전혀 동일하지 않습니다.
데이터를 확인하는 데 사용할 수있는 다른 메커니즘이 있습니다. 다시 말해, 프레임 워크는 최고의 실용성을 보여줄 수 있습니다.
양식의 데이터를 나타내는 객체를 만든 다음 프로세스를 첨부하고 다시 사용합니다. 빠른 PHP 스크립트를 해킹하는 것이 훨씬 많은 작업으로 들리지만 (처음은 아닙니다), 일반적인 PHP의 폼 유효성 검사가 스파게티 코드가되기 때문에 재사용 가능하고 유연하며 오류가 훨씬 적습니다.
답변
이것은 배열 과 문자열을 검사합니다 .
function is_set($val) {
if(is_array($val)) return !empty($val);
return strlen(trim($val)) ? true : false;
}