2013-03-11 23 views
0

我的头衔包括空间,[{} &()大写字母和其他一些未知的人物,我想更换只降低字符。 我使用这一点,但我不能预测哪些用户会给输入我正在考虑某种形式的正则表达式或浸渍料更换或浸渍匹配,这样有下划线(空间)只有更低字母是可以接受或标题转换为小写与underscore.i不希望其他任何字符一样,{[]}()&等取代一切以较低的信

我都试过,但会选择一条线路预浸更换或正则表达式

 $name = str_replace(' ', '_', $cityu); 
    $name1 = str_replace('(', '_', $name); 
    $name2 = str_replace(')', '_', $name1); 
+1

的乐趣:http://php.net/strtolower :)这将不低于A-Z – 2013-03-11 17:23:38

+0

@Allendar什么特殊字符弄乱其他字符??????? – wayenjoy 2013-03-11 17:24:21

+0

它只会遵从ISO拉丁语排版并将其替换为小写版本(如果它当然存在的话)。我已阅读了php.net上的文档页面,一些特殊的语言字母,如波兰语和斯堪的纳维亚语可能会失败。你真的需要对这些角色进行一些测试并做出例外。也许现在已经有一种API用于这种类型的场合,但遗憾的是我不知道100%的准确性。 – 2013-03-11 17:25:06

回答

5

我想你可以使用像这样的:

$string = preg_replace('/[^\w]/','_', $string); 
$string = strtolower($string); 
0

对于preg_replace()要使用这括在方括号[]一个字符类,如:

$output = preg_replace('/[() ]/', '_', $input); 

但是,如果你想更换所有非字母字符,那么你可以使用:

$output = preg_replace('/[^a-z0-9]/', '_', $input); 

^字符类中的意思是“不”,所以它替换不是从A到Z或0到9

最后,你可以转换到与strtolower()简单小写字符,所以你的代码看起来像:

$output = preg_replace('/[^a-z0-9]/', '_', strtolower($input)); 

您可能还需要凝聚多____成一个_,它可以这样做:

$output = preg_replace('/_{2,}/', '_', $input); 

{2,}指示要匹配的两个或多个正好_角色。

+0

有人要离开与downvote评论? – Sammitch 2013-03-11 17:31:15