PHP preg_replace 特殊字符

php
2022-08-30 21:25:17

我想替换所有非字母和数字字符,即 etc 用下划线替换,并将所有(单引号)替换为“”空白(所以没有下划线)。/&%#$(_)'

因此,“不会有任何”(忽略双引号)将变成“There_wouldnt_be_any”。

我在reg表达式上是无用的,因此这篇文章。

干杯


答案 1

如果你通过写“非字母和数字”排除超过(即考虑字母喜欢字母到)并希望能够准确地处理UTF-8字符串,并将有所帮助。[A-Za-z0-9]åäö\p{L}\p{N}

  1. \p{N}将匹配任何“数字”"
  2. \p{L}将匹配任何“字母字符”,其中包括
    • 小写字母
    • 修饰符字母
    • 其他信件
    • 标题大小写字母
    • 大写字母

文档 PHP:Unicode 字符属性


$data = "Thäre!wouldn't%bé#äny";

$new_data = str_replace  ("'", "", $data);
$new_data = preg_replace ('/[^\p{L}\p{N}]/u', '_', $new_data);

var_dump (
  $new_data
);

输出

string(23) "Thäre_wouldnt_bé_äny"

答案 2
$newstr = preg_replace('/[^a-zA-Z0-9\']/', '_', "There wouldn't be any");
$newstr = str_replace("'", '', $newstr);

我将它们放在两行上,以使代码更清晰一些。

注意:如果您正在寻找Unicode支持,请参阅下面的Filip的答案。它将匹配除 之外注册为字母的所有字符。A-z


推荐