我有这个公式来检查名称是否正确并删除非字母。但是,如果我的名字在名称中有å,å或ö,它将删除该字母,因为它不是英文字母的一部分
<?php
//mb_internal_encoding('UTF-8');
function ValidName($namn = NULL, $efternamn = NULL){
if(isset($namn)) {
$namn = preg_replace('/[^A-Za-z]/', '', $namn);
return $namn;
}
if(isset($efternamn)) {
$efternamn = preg_replace('/\P{L}+/', '', $efternamn);
return $efternamn;
}
}
?>
我尝试在/后添加u以允许unicode字母,但之后它只是偷了整个名字。 我在文件中也有这一行:mb_internal_encoding('UTF-8');
那么我如何正确地保持名称,但丢失点,逗号,数字以及你无法命名的所有内容?
专名:hellström
使用我的公式后:hellstrm
感谢任何帮助
答案 0 :(得分:3)
您可以使用unicode属性\P{L}
来检测所有unicode非字母:
$efternamn = preg_replace('/\P{L}+/', '', $efternamn);
答案 1 :(得分:0)
在您继续之前,强制性文章Falsehoods Programmers Believe About Names。允许用户为其名称添加任何内容是最好的(除非它是一个系统,其中必须使用用户的真实姓名,并且该名称后来与规范化数据库匹配)。
回到问题,有两种方法可以将ö
,ö
(U + 00F6)表示为单个代码点,或将ö
表示为两个代码点(o
并结合分析U + 0308)
如果您想允许使用任何语言的字母,则必须允许Letter and Mark categories中的所有字符:
$efternamn = preg_replace('/[^\p{L}\p{M}]+/', '', $efternamn);
这种方法非常粗糙,因为它没有检查组合标记是否放置正确。
如果上面的正则表达式不起作用,请尝试将u
modifier添加到上面的正则表达式。