在 php 中使用 UTF-8 字符拆分名字和姓氏
Split first and last name with UTF-8 Chars in php
希望有人可以提供一个简单的解决方案,以解决当全名中的字符带有法语或其他重音符号时拆分名字和姓氏的问题。
当名称没有任何重音符号时这似乎工作正常,但当字符串中有重音符号时无法检测到白色 space。
示例名称为 "Marc-André Côté"
$name = trim($FullNameInput);
$last_name = (strpos($name, ' ') === false) ? '' : preg_replace('#.*\s([\w-]*)$#', '', $name);
$first_name = trim( preg_replace('#'.$last_name.'#', '', $name ) );
您可以使用爆炸功能。它使用您的示例名称运行没有任何问题,并且比您的正则表达式解决方案更容易
$nameparts = explode(" ", $name);
echo $nameparts[0]; // First Name
echo $nameparts[1]; // Last Name
处理 Unicode 字符串时使用 UNICODE 修饰符并添加单引号,因为有些名称包含单引号:
preg_replace('#.*\s([\w\'-]*)$#u', '', $name)
UNICODE 修饰符也将使 \w
识别 Unicode。 preg_match
解决方案会更简洁:
preg_match('/\s\K[\w\'-]+$/u', $name, $m)
您只需要检查是否有匹配项。如果匹配,则获取 $m[0]
,否则为其分配一个空字符串。
希望有人可以提供一个简单的解决方案,以解决当全名中的字符带有法语或其他重音符号时拆分名字和姓氏的问题。
当名称没有任何重音符号时这似乎工作正常,但当字符串中有重音符号时无法检测到白色 space。
示例名称为 "Marc-André Côté"
$name = trim($FullNameInput);
$last_name = (strpos($name, ' ') === false) ? '' : preg_replace('#.*\s([\w-]*)$#', '', $name);
$first_name = trim( preg_replace('#'.$last_name.'#', '', $name ) );
您可以使用爆炸功能。它使用您的示例名称运行没有任何问题,并且比您的正则表达式解决方案更容易
$nameparts = explode(" ", $name);
echo $nameparts[0]; // First Name
echo $nameparts[1]; // Last Name
处理 Unicode 字符串时使用 UNICODE 修饰符并添加单引号,因为有些名称包含单引号:
preg_replace('#.*\s([\w\'-]*)$#u', '', $name)
UNICODE 修饰符也将使 \w
识别 Unicode。 preg_match
解决方案会更简洁:
preg_match('/\s\K[\w\'-]+$/u', $name, $m)
您只需要检查是否有匹配项。如果匹配,则获取 $m[0]
,否则为其分配一个空字符串。