다음과 같은 값이 있으면
$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 진수가 아닌 모든 문자”를 나타냅니다.
http://php.net/manual/en/regexp.reference.escape.php
답변
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 () 및 살균 필터에 대한 자세한 내용을 보려면
답변
요청이 아닌 숫자가 아닌 문자를 모두 제거 해야하는 경우 이전 문자를 매우 간단한 방법으로 작성할 수 있습니다 (그러나 문자열을 전달하는 함수를 작성하여 문자없이 필요한 값을 반환하도록 할 수 있습니다) .. 어쨌든..):
<?php
$String1 = 'AR3,373.31';
$String2 = '12.322,11T';
echo preg_replace('/[^0-9,.]+/i', '', $String1);
echo preg_replace('/[^0-9,.]+/i', '', $String2);
?>
답변
글자가 항상 시작이나 끝에있는 경우, 간단히 트림 만 사용하면됩니다. 정규 표현식이 필요하지 않습니다.
$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"
답변
middaparka과 동일 대답하지만 를 제거,.
$unformatted_phone = "phone 122-3222223.ext 442";
echo preg_replace("/[^0-9]/", "", $unformatted_phone);