2013-07-24 62 views
5

Tôi đã tìm kiếm nhưng không thể tìm thấy bất kỳ thứ gì đã giúpThay thế dấu cách và dòng mới bằng dấu phẩy trong php

Vì vậy, tôi có một loạt dữ liệu cần thiết về cơ bản. nói trong như:

13 
566 
888 
958 
898 

và tôi cần phải ra nó thích:

13,566,888,958,898 

thậm chí tốt hơn nếu tôi có thể di chuyển bất kỳ 2 chữ số một trên như:

566,13,888,958,989 

Tôi biết nó khá đơn giản, vì vậy về cơ bản tôi chỉ tạo một biểu mẫu, chuyển nó với GET và sau đó đọc biến từ url, sau đó tôi đang cố sử dụng str_replace ("", "," , $ outtext) để thay thế dấu cách bằng dấu phẩy để tôi có thể lặp lại và chỉ copypasta trong thực tế nhanh chóng, vấn đề là, tôi nghĩ dữ liệu có một dòng mới và tôi không biết cách thay thế, tôi đã thử "\ n" và "% 0D% 0A" nhưng nó không thay thế nó, nó chỉ đưa nó trở lại với tôi với không gian.

Dù sao, đây là đoạn code tôi đang sử dụng, có lẽ ai đó có thể cho tôi biết điều đơn giản rằng tôi đang mất tích,

<?php 
if (isset($_GET['intext'])) { 
    $outtext=$_GET['intext']; 

    $newout=str_replace(" ", ",", $outtext); 

    echo $newout; 
    //testing 
    //echo(str_replace(" ",",","$outtext")); 
} 
?> 

và html

<form name="indata" id="indata" method="get" action="index.php"> 
     <textarea id="intext" name="intext"></textarea> 
     <input type="submit" id="submit" name="submit"> 
    </form> 

Tôi cũng nghĩ về tung nó thành một mảng và kích thích nó, nhưng nó đã được một thời gian và tôi quên làm thế nào để làm điều đó.

Trả lời

10

Dòng mới vẫn có thể đăng ký nếu bạn có phiên bản "\ r \ n" của dòng mới - bạn đang xóa "\ n" và để lại "\ r" phía sau.

$str = preg_replace('/\s+/',',',str_replace(array("\r\n","\r","\n"),' ',trim($str))); 

Cleaner (dễ đọc hơn) phiên bản:

$str = preg_replace('#\s+#',',',trim($str)); 
+0

Vâng, tuyệt vời, thats nó là gì, hoạt động này hoàn hảo.Một câu hỏi khác, làm thế nào tôi có thể loại bỏ cuối cùng "," như trong, nó đi ra 13.566.569, và tôi chỉ muốn 13.566.569 (tôi cũng muốn di chuyển 13, ở giữa những con số đó, nhưng điều đó có thể phức tạp hơn cho việc này nhanh chóng và cần thiết bẩn) EDIT: nvm Tôi là một derp, tôi sẽ chỉ echo trong substr ($ output, 0, -1) – salty

+0

@salty Bạn có thể muốn 'trim' chuỗi trước khi áp dụng thay thế - xem câu trả lời đã chỉnh sửa – SmokeyPHP

+0

Cảm ơn SmokeyPHP, trim chắc chắn là thanh lịch hơn :) – salty

4

Như bạn nói, sử dụng một mảng sau đó nổ tung được một cách tiếp cận tốt:

$input = trim($_GET['intext']); 
$numbers = preg_split('/\s+/', $input); 
echo implode(',', $numbers); 

này Trims đầu vào của bất kỳ đệm, chia thành một mảng dựa trên khoảng trắng, sau đó implodes mảng bằng dấu phẩy.

0

Trong hệ thống * nix (và tôi tin mac) bạn có các dòng được phân tách bằng LF "\ n" và trên cửa sổ bạn có CR + LF "\ r \ n". Bạn có thể làm một số str_replace hoặc preg_replace và thay thế các khoảng trắng, CR + LF và sau đó là LF. Bạn có thể sử dụng một regex để thay thế bất cứ điều gì mà giải quyết trong regex của bạn với một dấu phẩy.

Hiển thị mã không thay thế nguồn cấp dữ liệu dòng và nguồn của chuỗi và có lẽ tôi có thể cho bạn biết lý do tại sao nó không hoạt động.

2

Trước tiên, hãy xóa mọi dấu cách trắng hoặc dấu trang dòng và dòng mới khỏi đầu vào của bạn rồi thay thế bằng dấu phẩy.

<?php 
    if(isset($_GET['intext'])){ 
     var_dump($_GET['intext']); 

     //get and trim the input 
     $value = trim($_GET['intext']); 

     //clean the input by removing extra white spaces 
     $value = preg_replace('/\s+/', ' ', $value); 

     //replace spaces with comma 
     $value = str_replace(" ", ',', $value); 

     //echo output 
     echo $value; 
    } 
?> 

<form name="indata" id="indata" method="get" action=""> 
    <textarea id="intext" name="intext"></textarea> 
    <input type="submit" id="submit" name="submit"> 
</form> 
Các vấn đề liên quan