我正在尝试编写一个函数来过滤从输入到只有字母和符号“ - ”的所有内容。我想要那个符号,因为输入包含名称,有人可能被称为Jean-Paul,这是我当前的代码:
if(!preg_match('/^\[a-zA-Z]+$/',$string)) {
// Containing something other than a-z and A-Z
}
$string = 'Jean-Paul';
现在认为该字符串包含非法字符,但我怎么能接受“-
”?
答案 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));