PHP Regex 仅允许 a-z A-Z 1-9 并用下划线替换空格

Posted

技术标签:

【中文标题】PHP Regex 仅允许 a-z A-Z 1-9 并用下划线替换空格【英文标题】:PHP Regex allow only a-z A-Z 1-9 and replace spaces with underscore 【发布时间】:2016-03-25 20:47:52 【问题描述】:

所以我需要preg_replace()

删除除 a-z A-Z 1-9 以外的所有字符 用单个下划线替换空格\s+ 如果字符串中有多个下划线,则需要替换为 单人[_]+

代码

$str = "Hz!!    zÒ142______23 4";
$str = preg_replace('/[^a-zA-Z0-9][_]+\s+/', '_', $str);
echo $str; //Outputs: Hz_z142_23_4

编辑我想用一个 preg_replace 来做

【问题讨论】:

你的预期输出是什么? 我需要Hz_z142_23_4 preg_replace('/[^\w]+|[_]+/','_',$str)怎么样 @bansi 这也将用_ 替换Ò,这是OP 不想要的。 How to remove non-alphanumeric characters?的可能重复 【参考方案1】:

你可以用两个替换来做到这一点:

$str = preg_replace('/[^\w\s]+/', '', $str);
$str = preg_replace('/[^a-zA-Z0-9]+/', '_', $str);

或者,就像在 cmets 中一样,您可以将它们组合成一个:

preg_replace(array('/[^\w\s]+/', '/[^a-zA-Z0-9]+/'), array('', '_'), $str);

【讨论】:

preg_replace(array('/[^\w\s]+/','/[^a-zA-Z0-9]+/'), array('','_'), $str); 把它们组合成一个 我将如何再添加一个符号以允许说感叹号“!” Roman Toasov 把它放在括号内的 \s 和括号内的 9 之后。

以上是关于PHP Regex 仅允许 a-z A-Z 1-9 并用下划线替换空格的主要内容,如果未能解决你的问题,请参考以下文章

如何使 RegEx 查询仅匹配整个字符串?

多个 RegEx 否定匹配

Regex[收集链接]

Regex-创建验证以强制一个字符串包含2个以上的单词

我的Android进阶之旅解决使用DiskLruCache报错: keys must match regex [a-z0-9_-]{1,64}

我的Android进阶之旅解决使用DiskLruCache报错: keys must match regex [a-z0-9_-]{1,64}