PHP删除除字母和连字符( - )之外的所有内容

时间:2012-11-04 15:24:04

标签: php regex filter

我正在制作一个表格,询问用户的名字和姓氏,我不希望他们进入

$heil4

我希望他们进入

Sheila

我知道如何过滤掉除字母以外的所有内容,但我知道有些名字可以

Sheila-McDonald

那么,除了字母和连字符之外,我如何从字符串中删除所有内容?

4 个答案:

答案 0 :(得分:4)

只需使用

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

或者如果您想将某些非ascii字符转换为ascii,例如Jean-RémyJean-Remy,请使用

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

答案 1 :(得分:2)

$new = preg_replace('#[^A-Z-]#iu', '', $data);

但不是删除字母(从而修改用户的输入),而是更好地验证它 如果输入无效,则显示错误。这样,用户就会知道他输入的内容正是您所拥有的价值

if(!preg_match('#[A-Z-]#iu', $data)) echo 'invalid';

答案 2 :(得分:2)

不要替换任何东西,而是要有一些乐趣。这样一个名称主要由您可以解码的数字组成; 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));

答案 3 :(得分:0)

使用此功能删除所有非字母数字字符,不包括非拉丁字符,以及prescribed punctuation

$strtochange= preg_replace("/[^\s\p{Pd}a-zA-ZÀ-ÿ]/",'',$strtochange);

注意:这会将$heil4变为heil