2010-09-27 36 views
4


我想在下面的条件如何更改所有非单词字符和多个空格转换',然后将所有的空间“ - ”中的一个的preg_replace()

  • 所有非单词字符改变形象的名字变成空间和
  • 那么所有的空间变成-

意味着,如果我的形象的名字:Hello My name is'[email protected] "Mr. .Khan "那么它应该变成Hello-My-name-is-kh-n-mr-Khan

我需要在两个步骤中使用以下,

$old_name ='  Hello  My name is\'[email protected] "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 

是否有任何方式应用在单一步骤中两个条件??

+3

为什么在一个单一的步骤做呢?仅仅通过两步就可以做到这一点,要简单得多,而且它并不能真正帮助你将它结合起来。 – Amber 2010-09-27 05:56:23

+0

所以这是可以做的两个步骤...谢谢琥珀 – JustLearn 2010-09-27 06:05:16

回答

2

我找到这个函数的输出(Hello_My_name_is-Kh-n_-Mr-_Khan_)有点难看
这里是我的方法

$name ='Hello  My name is\'[email protected] "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

+0

Sharpnel ...感谢您的好主意,我们如何限制名称长度(仅限于200) – JustLearn 2010-09-27 07:05:46

+0

@JustLearn您还可以添加substr()函数调用。 – 2010-09-27 07:19:13

6

preg_replace可以采取数组:

$new_name = preg_replace(array('/\s+/', '/\W/'), array('_', '-'), $old_name); 

这是更简洁,但我不相信这是任何更有效。文档没有指定应用正则表达式的顺序。由于空格字符都是非字字符,一个更安全的版本是:

$new_name = preg_replace(array('/\s+/', '/[^\s\w]/'), array('_', '-'), $old_name); 
0

可以在preg_replace使用数组:

$old_name ='Hello  My name is\'[email protected] "Mr. Khan '; 
$new_name = preg_replace(array('/\s+/','/\W/'),array('_','-'),$old_name); 

此外,

您的片段有语法错误,你需要在K之前转义单引号

+0

谢谢,这是错别字 – JustLearn 2010-09-27 06:06:49

0

这是重命名上传的图片吗?如果是这样,请记住...

  • 最大字符数
  • 非ASCII字符(应在合理的东西剪掉它)? (音译将是最好的)
+0

是的这是要在图像上传 – JustLearn 2010-09-27 06:07:31

+0

我需要o保重吗? – JustLearn 2010-09-27 07:06:36

相关问题