2016-06-28 2 views
0

그래서 사용자가 1,000.00을 입력 할 경우 유효한 숫자입니다. 사용자가 1,0,000,00.0000,0을 입력 한 경우 쉼표 다음에 숫자가 세 개 이상 있어야하므로 값이 1,0 ... 또는 000,00 일 수없는 여러 오류가 표시됩니다. 더 확장하려면 숫자의 점 뒤에 쉼표를 사용할 수 없습니다.PHP의 주어진 문자열/번호에서 코마의 유효성 검사

$ keyword = $ _POST [ 'keyword'];

if (preg_match('/0/',$keyword) ||preg_match('/1/',$keyword) ||preg_match('/2/',$keyword)||preg_match('/3/',$keyword) ||preg_match('/4/',$keyword) || preg_match('/5/',$keyword) || preg_match('/6/',$keyword) || preg_match('/7/',$keyword) ||preg_match('/8/',$keyword) ||preg_match('/9/',$keyword) ||preg_match('/-/',$keyword) ||preg_match('/+/',$keyword) || preg_match('/,/',$keyword)) { 
$keywordtest = $keyword; 
if ($keyword[0] == '+' || $keyword[0] == '-') 
{ 
    $keywordtest = substr_replace($keyword, '1', 0, 1); 
    echo $keywordtest; 
    } 
if (preg_match('/,/',$keyword)) 
{ 
$x = 0; 
while(true) 
{ 
$findme = ','; 
$pos = strpos($keyword, $findme); 
if ($pos !== false) 
    { 
    $posArray[x] = $pos; 
    $x = x + 1; 
    if (x == 10) 
    break; 
    } 

} 

$numberCheck = posArray[x-1]; 
if (is_numeric($numberCheck)) 
{ 
} 
else 
{ 
echo "false '{$keyword}' is not numeric", PHP_EOL; 
return 0; 
} 

$numberCheck = posArray[x+1]; 
if (is_numeric($numberCheck)) 
{ 
} 
else 
{ 
echo "false '{$keyword}' is not numeric", PHP_EOL; 
return 0; 
} 

$numberCheck = posArray[x+2]; 
if (is_numeric($numberCheck)) 
{ 
} 
else 
{ 
echo "false '{$keyword}' is not numeric", PHP_EOL; 
return 0; 
} 

$numberCheck = posArray[x+3]; 
if (is_numeric($numberCheck)) 
{ 
} 
else 
{ 
echo "false '{$keyword}' is not numeric", PHP_EOL; 
return 0; 
} 

}  



     test_numeric($keywordtest,$keyword); 
     return 0; 
} 

else 
    { 

     echo "false '{$keyword}' is not numeric", PHP_EOL; 

} 
function test_numeric($keywordtest,$keyword) 
{ 
    if (is_numeric($keywordtest)){ 

    echo "true '{$keyword}' is numeric", PHP_EOL; 
    } 
    return 0; 
} 

?>

+0

- 숫자로 은밀한와 각각 is_numeric 함수에 전달하고 true 또는 false로 결과를 반환 . 그러나 쉼표 앞뒤의 숫자가 유효한 숫자인지 어떻게 테스트 할 수 있습니까? 쉼표 위치를 지정하고 전후의 숫자가 유효한 숫자인지 확인했지만이 방법이 가장 효과적이지 않으며이 코드가 작동하지 않는다고 생각합니다. –

+0

코드를 올바르게 포맷 해 주시겠습니까? – Pete

+0

형식에 문제가 있습니까? 나는 쉼표를 사용하는 법을 알 필요가있다. 문자열을 가져 와서 유효한 숫자 인 경우 확인하려면 –

답변

2

당신은 FILTER_VALIDATE_FLOAT filter type과 FILTER_FLAG_ALLOW_THOUSAND 플래그와 함께 filter_var를 사용하는 것이 좋습니다.

그럼 정말 간단하다 :

내가 여기 다, 내가 +를 가지고 있다는 것입니다 무엇을
// $val == 100000 
$val = filter_var('100,000.00', FILTER_VALIDATE_FLOAT, array('flags' => FILTER_FLAG_ALLOW_THOUSAND)); 

// $val == -100000 
$val = filter_var('-100,000.00', FILTER_VALIDATE_FLOAT, array('flags' => FILTER_FLAG_ALLOW_THOUSAND)); 

// $val === false (invalid) 
$val = filter_var('100,000.00,00', FILTER_VALIDATE_FLOAT, array('flags' => FILTER_FLAG_ALLOW_THOUSAND)); 
+0

다른 숫자를 사용하면이 방법이 유용할까요? –

+0

다른 숫자는 무엇입니까? – Pete

+0

그들이 203,221,121.12를 말 그대로 가능한 모든 숫자처럼 넣는 지 말하십시오 –

관련 문제