다음과 같은 값이 있으면
$var1 = AR3,373.31
$var2 = 12.322,11T
쉼표와 마침표를 제외하고 새 변수를 만들어 숫자가 아닌 문자가 제거 된 데이터의 복사본으로 설정하려면 어떻게해야합니까? 위의 값은 다음 결과를 반환합니다.
$var1_copy = 3,373.31
$var2_copy = 12.322,11
다음과 같은 값이 있으면
$var1 = AR3,373.31
$var2 = 12.322,11T
쉼표와 마침표를 제외하고 새 변수를 만들어 숫자가 아닌 문자가 제거 된 데이터의 복사본으로 설정하려면 어떻게해야합니까? 위의 값은 다음 결과를 반환합니다.
$var1_copy = 3,373.31
$var2_copy = 12.322,11
답변:
preg_replace 를 사용 하여 다음과 같이 숫자가 아닌 모든 문자 와 쉼표 및 마침표 / 마침표 를 교체 할 수 있습니다 .
<?php
$testString = '12.322,11T';
echo preg_replace('/[^0-9,.]/', '', $testString);
?>
이런 오래된 질문에 대해 filter_var 에 대한 언급이 없다는 것에 놀랐습니다 ...
PHP는 살균 필터를 사용하여이를 수행하는 내장 된 방법을 가지고 있습니다 . 특히,이 상황에서 사용 FILTER_SANITIZE_NUMBER_FLOAT
하는 것은 FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND
플래그 와 함께 있습니다. 이렇게 :
$numeric_filtered = filter_var("AR3,373.31", FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
echo $numeric_filtered; // Will print "3,373.31"
PHP에 내장되어 있기 때문에 PHP의 현재 라이브러리와 함께 정규식을 사용하는 것보다 문자 속도가 약간 빠릅니다 (문자 그대로 나노초).
숫자가 아닌 문자를 모두 제거하는 가장 간단한 방법 :
echo preg_replace('/\D/', '', $string);
\D
"10 진수가 아닌 모든 문자"를 나타냅니다.
filter_var
숫자, 점 및 쉼표를 제외한 모든 잘못된 문자를 제거 하는 데 사용할 수 있습니다 .
FILTER_SANITIZE_NUMBER_FLOAT
필터는 문자열에서 숫자가 아닌 모든 문자를 제거하는 데 사용됩니다.FILTER_FLAG_ALLOW_FRACTION
분수 분리기를 허용합니다 " . "
FILTER_FLAG_ALLOW_THOUSAND
문자열에서 쉼표를 얻는 목적 .암호
$var1 = '12.322,11T';
echo filter_var($var1, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
산출
12.322,11
filter_var () 및 살균 필터에 대한 자세한 내용을 보려면
글자가 항상 시작이나 끝에있는 경우, 간단히 트림 만 사용하면됩니다. 정규 표현식이 필요하지 않습니다.
$string = trim($string, "a..zA..Z"); // this also take care of lowercase
"AR3,373.31" --> "3,373.31"
"12.322,11T" --> "12.322,11"
"12.322,11" --> "12.322,11"