ST8*_*T80 3 php regex string str-replace
当我替换字符串的空格、点和逗号时,有时会出现双连字符。
例如转check out the 1. place成check-out-the-1--place
我怎样才能避免这种情况?我希望它是check-out-the-1-place- 这样每个单词之间只有一个连字符。这是我的代码:
str_replace([' ', ',', '.','?'], '-', strtolower($pathname));
Run Code Online (Sandbox Code Playgroud)
现在,我知道为什么它会返回双连字符,但我不知道如何解决这个问题。
有人可以帮我吗?
我怎样才能避免这种情况?我希望它是 check-out-the-1-place - 这样每个单词之间只有一个连字符。这是我的代码:
虽然穆罕默德的答案是几乎没有,这里是一个更全面的工作PCRE正则表达式的方法,并解释它是如何工作的,所以你可以根据需要使用它:
$str = trim(strtolower($pathname));
$newStr = preg_replace('/[\s.,-]+/', '-', $str);
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:
[\s.,-]+
+量词在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)\s匹配任何空白字符(等于 [ \r\n\t\f\v]).,-匹配列表中的单个字符.,-(区分大小写)-必须位于结束的中[]集。结果:
这:查看 1. 地方
变成:
check-out-the-1-place
和
这:检查 - 1.地方
成为
check-out-the-1-place
我会更进一步,假设您将它用于 URL slug(什么?!);去掉所有从字符串非字母数字字符和具有单取代-按照典型网站蛞蝓。
$newStr = preg_replace('/[^a-z0-9]+/i', '-', $str);
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:
^)[a-z0-9]+
+量词在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)a-z a(索引 97)和 z(索引 122)之间范围内的单个字符(区分大小写)0-9 0(索引 48)和 9(索引 57)之间范围内的单个字符(区分大小写)i在末端指示的判断是壳体在敏感。例子:
退房 - 没有!1. 放置
变成:
check-out-the-1-Place
| 归档时间: |
|
| 查看次数: |
1336 次 |
| 最近记录: |