我正在制作一个表格,要求输入用户的名字和姓氏,但我不希望他们输入
$heil4
我希望他们进入
Sheila
我知道如何过滤除字母以外的所有内容,但我知道有些名字可以有
Sheila-McDonald
那么,除了字母和连字符之外,我如何从字符串中删除所有内容?
只需使用
$s = preg_replace("/[^a-z-]/i", "", $s);
或者如果你想将一些非 ascii 字符转换为 ascii,例如Jean-Rémy
to Jean-Remy
,那么使用
$s = preg_replace("/[^a-z-]/i", "", iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $s));
$new = preg_replace('#[^A-Z-]#iu', '', $data);
但不是删除字母(从而修改用户的输入),而是更好地验证它并在输入无效时显示错误。这样用户就会知道他输入的正是你所拥有的值
if(!preg_match('#[A-Z-]#iu', $data)) echo 'invalid';
与其一无所有,不如找点乐子。这样一个名称主要由您可以解码的数字组成;p
$name = '$h3il4-McD0nald';
$find = array(0,1,3,4,5,6,7,'$');
$replace = array('o','l','e','a','s','g','t','s');
$name = str_replace($find,$replace,$name);
//Sheila-McDonald
echo ucfirst(preg_replace('/[^a-z-]/i', '', $name));