You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现仅允许带重音拉丁人名、禁止中俄字符的方案问询

PHP拉丁系人名验证方案

直接上可行的正则方案,完美支持所有拉丁系字符(含捷克、冰岛等地区的特殊重音字符),同时拦截中文、俄文等非拉丁字符:

// 匹配仅含拉丁字母、空格、撇号、连字符、点号的人名,u修饰符确保UTF-8解析
$namePattern = '/^[\p{Latin} \'.-]+$/u';

if (preg_match($namePattern, $values['person_name'])) {
    // 人名验证通过
} else {
    // 包含非拉丁字符或非法符号,验证失败
}

为什么之前的方案都不行?

  • strlen/mb_strlen对比法:只能检测字节数≠字符数的多字节字符,但像捷克语的š这类拉丁特殊字符本身就是多字节UTF-8,会被误判为非拉丁字符,导致冰岛、捷克人名验证失败。
  • 之前的正则问题:
    • 用\p{L}会匹配所有Unicode字母(包括中文、俄文),自然放行非拉丁字符;
    • 手动写À-ÿ这类字符范围,覆盖不全所有拉丁系特殊字符(比如š、ň不在这个区间里);
    • 部分正则没加u修饰符,没法正确解析UTF-8编码的特殊字符。

测试验证

  • 能通过的合法人名:Eliška Koňaříková、Ólafur Ragnar Grímsson、Jean-Luc Picard、O'Conner
  • 会被拦截的非法内容:张三、Иван、書

可选扩展

如果要限制人名长度(比如至少2个字符),可以修改正则:

$namePattern = '/^[\p{Latin} \'.-]{2,}$/u';

内容的提问来源于stack exchange,提问作者CopperRabbit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:38:16