从PHP字符串中删除除字母以外的所有内容

13
如何从字符串中去除字母以外的所有内容?我有一个用于输入名字的字段。

4
这项工具被称为正则表达式,简称regexp。它基本上接受[a-zA-Z]并剥离其他一切内容。不过我认为你在设计上犯了一个错误。玛丽-马德琳和她的朋友恩贡贝怎么处理? - Kheldar
4
我的名字是Radosław - 其中有除[a-zA-Z]以外的字母。另外,如果您需要限制输入的某些原因,请要求用户自行更正,而不是自己修改。如果你们的美式中文数据库里没有ł这个字母,我可以变成Radoslaw或者Radek,但是如果你让我成为一个Radosaw,我就不会喜欢你了。 - rczajka
1
正如@rczajka所指出的那样,在网络上,你必须要更加灵活一些。仅允许使用ASCII字母将无法满足许多用户的需求。相反,最好使用 preg_replace('/\PL/u', '', $str) 这个过滤非字母的函数。 - mario
你到目前为止尝试了什么却没有得到结果?这不是一个让别人替你完成工作的网站;它是为了帮助你解决自己尝试做却失败的事情。你必须自己先付出一些努力。 - Ken White
是时候接受一个答案了... - Martin Schlagnitweit
3个回答

26

你提供的示例链接已经失效,但我已经测试过了,它可以很好地处理UTF-8字符串。 - nullability

13
$new_string = preg_replace('/[^a-z]/i','',$old_string);

6
嗯,我不知道。为什么我们要点赞那些没有解释且甚至不能正常工作的一句话呢? - mario
2
@Martin 我打错字了,在代码中写了'Z'而不是'z'。 但我们都会犯错,包括你。(在那个codepad中,你的正则表达式没有'^'字符。) - Brian Glaz
这个更容易调整,适用于没有特殊正则表达式技能的人,比如我。 - Jeffz

-1
$new_string = ereg_replace("[^A-Za-z]", "", $string );

11
强烈建议您不要使用这种方法:来自PHP.net的说明是:“自PHP 5.3.0版本起,此函数已被弃用。高度不建议依赖此功能。”(链接:http://php.net/manual/en/function.ereg-replace.php)如果使用它,会抛出一个E_NOTICE错误。 - ShaneC
1
哦,抱歉,我没有意识到它已经被弃用了。那么你可以忽略这个答案。 - Will
自 PHP 5.3.0 起已被弃用。 - J.C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接