去除所有字符串的奇怪字符

时间:2010-11-17 22:59:58

标签: php regex preg-match

我正在尝试创建一个slug,所以我想剥离每个奇怪的charachter。 slug应该包含的唯一内容是小写字母和下划线。有没有办法检查奇怪的charachters并过滤掉字符串?应该删除所有不是字符串或下划线的内容

这就是我所拥有的:

if(!preg_match_all('/[a-z]/')):
    $output = preg_replace("/ ... euhm ... /", "", $slug2);
else:
    $output = $slug2;
endif;

我应该从这里开始:创建一个3D功能区环绕效果(加上一个免费的PSD!)

指向: create_a_3d_ribbon_wrap_around_effect_plus_a_free_psd

3 个答案:

答案 0 :(得分:3)

$slug = strtolower($slug);
$slug = str_replace(" ", "_", $slug);
$slug = preg_replace("/[^a-z0-9_]/", "", $slug);

答案 1 :(得分:1)

无需初始匹配。您可以进行无条件搜索和替换。如果没有什么可以替代,没什么大不了的。在这里它是函数调用的一个大链:

$slug = trim(preg_replace('/[\W_]+/', '_', strtolower($slug)), '_');

或分成不同的行:

$slug = strlower($slug);
$slug = preg_replace('/[\W_]+/', '_', $slug);
$slug = trim($slug, '_');

说明:

  1. 使用strtolower将大写字母转换为小写。
  2. 搜索\W_。 “单词”字符是字母,数字或下划线。 “非单词”字符与此相反,即空格,标点符号和控制字符。 \W匹配“非字”字符。
  3. 用下划线替换这些坏字符。如果连续存在多个,则它们将被单个下划线替换。
  4. 从字符串的开头和结尾修剪下划线。
  5. 代码是复杂的一面,因为它需要处理几个棘手的案例:

    • 需要删除两端的错误字符,而不是转换为下划线。例如,您示例中的!)
    • 我们希望foo_-_bar变成foo_bar,而不是foo___bar。应该折叠下划线,基本上。

答案 2 :(得分:0)

$slug = preg_replace("[^a-z_]", "", $slug);