-3

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

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

$string = 'Jean-Paul';现在给出该字符串包含非法字符,但我该怎么做才能接受 " -" ?

4

2 回答 2

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

如果 A-是字符类中的第一个或最后一个字符,则它被视为字符类中的文字破折号。

请注意,"Jean-Rémy"仍然会失败。您确定要将自己限制为 ASCII 字母吗?

于 2012-11-04T12:58:52.030 回答
1

如果“过滤器”是指删除不需要的字符,则使用

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

或者

$s = preg_replace("/[^a-z-]/i", "", iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $s));
于 2012-11-04T14:35:40.860 回答