2012-02-17 17 views
37

Trong PHP, tôi có một chuỗi các biến TẤT CẢ các chuỗi. Một số giá trị được lưu trữ là các chuỗi số bằng dấu phẩy.PHP xóa dấu phẩy khỏi các chuỗi số

Những gì tôi cần:

Cách để cắt dấu phẩy từ chuỗi và CHỈ làm điều này cho chuỗi số. Điều này không đơn giản như nó trông. Lý do chính là do lỗi sau:

$a = "1,435"; 

if(is_numeric($a)) 
    $a = str_replace(',', '', $a); 

Điều này không thành công vì $a = "1435" là số. Nhưng $a = "1,435" không phải là số. Bởi vì một số chuỗi tôi nhận được sẽ là câu thông thường với dấu phẩy, tôi không thể chạy một chuỗi thay thế trên mỗi chuỗi.

+0

sử dụng preg_replace để chọn lọc thay thế dấu phẩy được bao bọc ở cả hai bên bởi [0-9]? – Daan

Trả lời

20

Không thử nghiệm, nhưng có lẽ cái gì đó như if(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)

+0

Có, tính năng này hoạt động. Tôi đã thử tất cả các định dạng chuỗi mà tôi mong đợi, và nó hoạt động. Sẽ đánh dấu là câu trả lời được chấp nhận khi trang web cho phép tôi. – user1082428

+0

Nếu bạn muốn xóa dấu phẩy khỏi các số bên trong một chuỗi cũng chứa các từ sử dụng mẫu này nếu bạn muốn tránh xóa dấu phẩy bằng các từ:/[0-9] + [,] + [0-9] +/ – Flaxious

77

Do nó là cách khác xung quanh:

$a = "1,435"; 
$b = str_replace(',', '', $a); 

if(is_numeric($b)) { 
    $a = $b; 
} 
+0

Cảm ơn bạn cho trả lời, điều này làm việc cho tôi. +1 – user1082428

+1

chi phí tiềm năng để gọi 'str_replace' mỗi lần, nhưng sự vắng mặt của bất kỳ regex nào cũng là một điểm cộng lớn. – KnightHawk

2
function cleanData($a) { 

    if(is_numeric($a)) { 

    $a = preg_replace('/[^0-9,]/s', '', $a); 
    } 

    return $a; 

} 
+0

Điều này cũng hoạt động, +1 – user1082428

8

Các đơn giản nhất sẽ là:

$var = intval(preg_replace('/[^\d.]/', '', $var)); 

hoặc nếu bạn cần phao :

$var = floatval(preg_replace('/[^\d.]/', '', $var)); 
+0

cộng với 1 cho một lớp lót đẹp – Niroshan

0

Cố gắng này .Đây làm việc cho tôi

number_format(1235.369,2,'.','')

nếu bạn sử dụng number_format như này number_format(1235.369,2) câu trả lời sẽ là 1,235.37

nhưng nếu bạn sử dụng như dưới đây

number_format(1235.369,2,'.','') câu trả lời sẽ là 1235.37

loại bỏ "," của "1,235.37"

0

Nếu bạn muốn loại bỏ dấu phẩy từ các số bên trong một chuỗi mà cũng chứa những từ, cách dễ nhất tôi nghĩ rằng sẽ sử dụng preg_replace_callback:

Ví dụ:    

$str = "Hey hello, I've got 12,500 kudos for you, spend it well"

function cleannr($matches) 
{ 
    return str_replace("," , "" , $matches["nrs"]); 
} 

$str = preg_replace_callback ("/(?P<nrs>[0-9]+,[0-9]+)/" , "cleannr" , $str); 


Output:

"Hey hello, tôi đã có 12500 thanh danh cho bạn, chi tiêu tiền cũng"


Trong trường hợp này mô hình (regex) khác với cái được đưa ra trong câu trả lời được chấp nhận vì chúng tôi không muốn xóa các dấu phẩy khác (dấu chấm câu).

Nếu chúng ta muốn sử dụng /[0-9,]+/ đây thay vì /[0-9]+,[0-9]+/ đầu ra sẽ là:

"Hey chào Tôi đã có 12500 thanh danh cho bạn chi tiêu nó cũng"