过滤除字母和“ - ”之外的所有内容

时间:2012-11-04 12:57:08

标签: php regex

我正在尝试编写一个函数来过滤从输入到只有字母和符号“ - ”的所有内容。我想要那个符号,因为输入包含名称,有人可能被称为Jean-Paul,这是我当前的代码:

if(!preg_match('/^\[a-zA-Z]+$/',$string)) {
 // Containing something other than a-z and A-Z
}

$string = 'Jean-Paul';现在认为该字符串包含非法字符,但我怎么能接受“-”?

2 个答案:

答案 0 :(得分:3)

if (!preg_match('/^[A-Z-]+$/i', $string)) {
 // Contains something other than A-Z (case-insensitive) or -
}

如果-是第一个或最后一个字符,则"Jean-Rémy"被视为字符类中的文字短划线。

请注意{{1}}仍会失败。您确定要将自己限制为ASCII字母吗?

答案 1 :(得分:1)

如果通过“过滤器”表示删除不需要的字符,请使用

$s = preg_replace("/[^a-z-]/i", "", $s);

$s = preg_replace("/[^a-z-]/i", "", iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $s));