Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将所有非单词字符和多个空格更改为'';然后将所有空间转换为'-';在一个preg_替换()_Php_Regex_Preg Replace - Fatal编程技术网

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]
      我需要什么来更加小心??