Reg exp想要用下划线替换所有非字母数字字符

Cli*_*ote 8 php regex

我想要一个reg exp用于生成SEO友好的URL,所以像这样的事情:

My product name
Run Code Online (Sandbox Code Playgroud)

My_product_name

This is a long,long,long!!sentence
Run Code Online (Sandbox Code Playgroud)

This_is_a_long_long_long_sentence
Run Code Online (Sandbox Code Playgroud)

基本上所有非字母数字字符都被删除并替换为下划线.

有任何想法吗?

Wim*_*Wim 25

preg_replace('/[^a-zA-Z0-9]+/', '_', $sentence)

基本上它会查找任何非字母数字字符序列,并将其替换为单个"_".这样,您还可以避免在输出中连续输入两个_.

如果是URL,您可能还希望它们仅为小写:

preg_replace('/[^a-z0-9]+/', '_', strtolower($sentence))

  • 如果删除+,则单个非字母数字字符的每个出现都将替换为`_`.如果你的原始字符串有两个非字母数字字符,那么结果字符串将包含你可能不想要的`__` (2认同)
  • 请注意,通过这个答案,您可能仍然在字符串的开头和/或结尾处有一个“_”,因此您最好还添加“$a = trim($a, '_');”(+ 1 到 Sterefrog 那个) (2认同)

use*_*291 5

 $a = preg_replace("/[^A-Za-z0-9]+/", "_", $str);
Run Code Online (Sandbox Code Playgroud)

或/\W + /如果要保留当前语言环境中被视为"字母"的所有内容

更换后,可能还需要设置前导和尾随下划线

 $a = trim($a, '_');
Run Code Online (Sandbox Code Playgroud)