簡體   English   中英

如何用連字符替換點,空格和逗號,並使用php避免雙連字符?

[英]How to replace dots, spaces and commas with hyphen and avoid double hyphen using php?

當我替換字符串的空格,點和逗號時,有時會出現雙連字符。

例如check out the 1. place check-out-the-1--place check out the 1. place轉換check-out-the-1--place

我該如何避免呢? 我希望它可以check-out-the-1-place -以便每個單詞之間只有一個連字符。 這是我的代碼:

str_replace([' ', ',', '.','?'], '-', strtolower($pathname));

現在,我知道為什么它會返回雙連字符,但是我不知道如何解決。

有人可以幫我嗎?

我該如何避免呢? 我希望它可以在1位簽出-以便每個單詞之間只有一個連字符。 這是我的代碼:

盡管Mohammad的答案近在咫尺,但這里有一個更完善的PCRE regex方法以及如何工作的解釋,因此您可以根據需要使用它:

$str = trim(strtolower($pathname));
$newStr = preg_replace('/[\s.,-]+/', '-', $str);

工作原理:

  • 匹配[\\s.,-]+下面列表中的單個字符
    • +量詞在一次和無限次之間進行匹配, 盡可能多次匹配,並根據需要返回(貪婪)
    • \\s匹配任何空格字符(等於[ \\r\\n\\t\\f\\v ])
    • .,-匹配列表中的單個字符.,- (區分大小寫)
    • 破折號-必須位於[]集的末尾

結果:

這:簽出1.地方

成為:

check-out-the-1-place

這:簽出-1.地點

成為

check-out-the-1-place


進一步:

我會走得更遠,並假設您正在使用它來處理URL子彈( 什么?! ); 從字符串中去掉所有非字母數字字符,並用一個單一的取代-按典型網站蛞蝓。

 $newStr = preg_replace('/[^a-z0-9]+/i', '-', $str);

工作原理:

  • 匹配[a-z0-9]+下面列表中的單個字符NOT^
    • +量詞在一次和無限次之間進行匹配, 盡可能多次匹配,並根據需要返回(貪婪)
    • az在(索引97)和z(索引122)之間的范圍內的單個字符(區分大小寫)
    • 0-9單個字符,介於0(索引48)和9(索引57)(區分大小寫)之間
    • 最后的i表示判斷不區分大小寫

例:

退房-號! 1.地點

成為:

check-out-the-1-Place

您可以改用preg_replace()和用戶正則表達式來選擇多個特定字符。

$newStr = preg_replace("/[\s.,]+/", "-", $str)

演示中檢查結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM