【问题标题】:PHP Regex allow only a-z A-Z 1-9 and replace spaces with underscorePHP Regex 仅允许 a-z A-Z 1-9 并用下划线替换空格
【发布时间】: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 不想要的。

标签: php regex


【解决方案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 之后。
猜你喜欢
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多