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