正则表达式:Preg_replace除½之外的所有特殊字符

时间:2015-04-09 15:50:00

标签: php regex

我需要删除除½

以外的所有特殊字符
preg_replace('/[^A-Za-z0-9\-]/', '', $string);

这是我到目前为止所拥有的。我将½转换为其他东西吗?

谢谢

3 个答案:

答案 0 :(得分:1)

只需将½添加到正则表达式,然后就可以了:

preg_replace('/[^A-Za-z0-9½\-]/', '', $string);

Regular expression visualization

答案 1 :(得分:1)

尝试格式为\x{00BD}的Unicode十六进制x00BD:

preg_replace('/[^A-Za-z0-9\x{00BD}-]/', '', $string);

此外,如果它位于字符类的开头或结尾,则无需转义-

答案 2 :(得分:1)

您可以将½添加到角色组,但是您必须使用修饰符u切换到unicode(utf-8)模式。

$string = "Example: ½¼";
var_dump(
  preg_replace('/[^A-Za-z0-9½-]/u', '', $string)
);

输出:

string(9) "Example½"

您也可以使用提供字符作为unicode代码点。

var_dump(
  preg_replace('/[^A-Za-z0-9\x{00BD}-]/u', '', $string)
);

如果没有unicode模式,它将分别匹配字符的两个字节。这可能导致部分删除字符。