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

Fra*_*ank 3 php regex filter

我正在制作一个表格,要求输入用户的名字和姓氏,但我不希望他们输入

$heil4
Run Code Online (Sandbox Code Playgroud)

我希望他们进入

Sheila
Run Code Online (Sandbox Code Playgroud)

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

Sheila-McDonald
Run Code Online (Sandbox Code Playgroud)

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

Ωme*_*ega 5

只需使用

$s = preg_replace("/[^a-z-]/i", "", $s);
Run Code Online (Sandbox Code Playgroud)

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

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


Ale*_*lex 2

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

但与其删除字母(从而修改用户的输入),不如验证它并在输入无效时显示错误。这样用户就会知道他输入的正是您拥有的值

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