를 사용할 수있는 숫자입니다. 성능 차이는 미미합니다. 그러나 어떤 경우에는 정수가 생성되지 않을 수도 있습니다.
예를 들어, $input = '19.99';
으로 지정하십시오.
$i = $someString + 0; // $i = 19.99
다른 두 케이스는 동일하지만 $i = intval($someString);
$i = (int) $someString;
평균보다 약 56 % 더 빠르게. 둘 다 밀리 초 단위로 실행되기 때문에 상당한 차이가 나지 않는 한 성능 차이는 일반적으로 무시할 수 있습니다. 보안의 문제에
$i = (int) $someString; // $i = 9
$i = intval($someString); // $i = 9
: 당신이 $input
은 항상 특정 형태로 될 것으로 예상되는 경우 (예를 들어,#는 # _xxxx_), 당신은 그것을 그 형식 것을 확인해야합니다. Jack ’의 확장 — ’ PHP> = 5.2.0을 사용하는 경우 정규식을 사용하여 입력 형식을 확인할 수 있습니다.
<?php
$input = '1_abcd_1';
// Set the desired format
$filter_options = array(
'options' => array(
// choose a regular expression that matches your format
'regexp' => '/^[\d]_[a-z]{4}_[\d]$/'
)
);
$format = filter_var($input, FILTER_VALIDATE_REGEXP, $filter_options);
if ($format !== false) {
// process input
$someString = substr($format, strripos($format, "_") + 1);
$i = (int) $someString;
echo '$i = ', $i;
} else {
// Handle invalid format
echo 'Malformed data. Potentially malicious';
}
?>
이 완전히 같은 것들을 거부합니다 : 당연히
0xfe
bob
j_xtyz_5
1_wxyz_22
21_abcd_1
1_Abcd_2
을, 당신은 당신의 요구에 정규 표현식을 조정한다.
은 참조 : 당신이 ’ PHP> = 5.2.0를 사용하지 않는 재, 당신은 preg_match을
사용 할 수 있습니다.입력의 형식을 검증 는
<?php
$input = '1_abcd_2';
$valid = preg_match('/^[\d]_[a-z]{4}_[\d]$/', $input);
if ($valid) {
// process input
$someString = substr($input, strripos($input, "_") + 1);
$i = (int) $someString;
echo '$i = ', $i;
} else {
// Handle invalid format
echo 'Malformed data. Potentially malicious';
}
?>
데이터가 변경되었는지 여부를 즉시 알 수 ’들 수 있습니다. 그러면 그에 따라 행동 할 수 있습니다.
재미있는 :-). 'is_numeric()'을 사용하는 Rajan Rawal 제안과 결합 할 것입니다. –
@DaanTimmer no,'is_numeric ('0xfe') == true'는 아마도 당신이 원하는 것이 아닙니다. 만약 정수를 테스트하고 싶다면'filter_var'를 사용할 수 있습니다. –
보안을 확장하기 위해 답을 업데이트했습니다. filter_var @ 잭을 가져와 주셔서 감사합니다. – Herbert