Php 如何将所有非单词字符和多个空格更改为'';然后将所有空间转换为'-';在一个preg_替换()
Php 如何将所有非单词字符和多个空格更改为'';然后将所有空间转换为'-';在一个preg_替换(),php,regex,preg-replace,Php,Regex,Preg Replace,我想在以下条件下更改图像名称 所有非单词字符都转换为空格和空格 然后所有空格变成- 意思是如果我的图像名是:你好,我的名字是'Kh@n“Mr..Khan”然后应该将其更改为Hello-My-name-is-kh-n-Mr-Khan 我需要分两步使用下面的 $old_name =' Hello My name is\'Kh@n "Mr. Khan '; $space_name = preg_replace('/\W/',' ', $old_name); $
我想在以下条件下更改图像名称
- 所有非单词字符都转换为空格和空格
- 然后所有空格变成
-
你好,我的名字是'Kh@n“Mr..Khan”
然后应该将其更改为Hello-My-name-is-kh-n-Mr-Khan
我需要分两步使用下面的
$old_name =' Hello My name is\'Kh@n "Mr. Khan ';
$space_name = preg_replace('/\W/',' ', $old_name);
$new_name= preg_replace('/\s+/','-', $space_name);
echo $new_name // returns Hello-My-name-is-kh-n-mr-Khan
是否有任何方法可以在一步中应用这两个条件???可以采取以下措施:
$new_name = preg_replace(array('/\s+/', '/\W/'), array('_', '-'), $old_name);
这更简洁,但我不认为它更有效率。文档没有指定应用regexp的顺序。由于空格字符是非单词字符,因此更安全的版本是:
$new_name = preg_replace(array('/\s+/', '/[^\s\w]/'), array('_', '-'), $old_name);
您可以在
preg\u replace
中使用数组:
$old_name ='Hello My name is\'Kh@n "Mr. Khan ';
$new_name = preg_replace(array('/\s+/','/\W/'),array('_','-'),$old_name);
而且
您的代码段有语法错误,您需要在
K
之前转义单引号,这是重命名上载的图像吗?如果是这样,请记住
- 最大字符数(应将其剪成合理的值)
- 非ASCII字符?(最好用音译)
- 我发现这个函数的输出(
Hello\u My\u name\u is-Kh-n\u-Mr-\u Khan\u
)有点难看这是我的方法
$name ='Hello My name is\'Kh@n "Mr. Khan" ';
$name = preg_replace('/\W/',' ', $name);
$name = trim($name);
$name = strtolower($name);
$name = preg_replace('/\s+/','-', $name);
输出
hello-my-name-is-kh-n-mr-khan
为什么一步到位?只需分两步就可以简单得多,而且组合起来并不会给你带来任何好处。所以分两步就可以了…谢谢AmberSharpnel…谢谢你的好主意,我们如何限制名称的长度(只有200个)@JustLearn你可以添加substr()函数调用。开始用破折号替换\W+
,并修剪破折号。这样您就不需要第二次更换。最终将\W
更改为[\W\u]
我需要什么来更加小心??