这是用户全名的正则表达式,所以我想允许空格。 此外,我使用以下正则表达式仅允许 UTF-8 字符:
/^(\p{L}+)$/u
然后看到这里有帖子说需要给字符类加空格,但是不行:
/^(\p{L} +)$/u
请您参考如下方法:
根据您接受全名和 unicode (u) 模式的正则表达式,尝试考虑此正则表达式(兼容标准 POSIX 正则表达式,包括 Python、JS 和 PHP 正则表达式):
/^[\p{L}'\-\.]+( [\p{L}'\-\.]+)*$/u
因此,该正则表达式将由以下人员分析:
- 任何字母字符(包括撇号、连字符和句点):
[\p{L}'\-\.]+
- 每个额外的名字都包含:
- 恰好一个空格:
- 后跟适用的字母字符:
[\p{L}'\-\.]+
- 所有组合在一起,形成
( [\p{L}'\-\.]+)*
- 恰好一个空格:
此正则表达式支持单个和多个单词名称(也就是用户的全名)。如果要包含更多字符,请通过添加更多字符来修改 [\p{L}'\-\.]
(尤其是在需要重音字符时,例如 ñ
。目前,它包括不同脚本中的字母字符以及撇号和连字符。
它在PHP或JS引擎中接受这样的名称,你可以测试它对其他引擎显示有些引擎需要你手动添加这些字符或将其更改为\w
(测试可以验证here ):
Johnny Appleseed
Martin Harding-Rolls
丹尼尔·奥布莱恩
IJsbrand van 't IJsselstein
欧几里德
Jalapeño Arriba
(您可能需要将 ñ 添加到列表中)S.L.IJ.M.B.A.L P.U.I.S.T
Paul Erdős
(您可能需要在列表中添加匈牙利重音字母)на русском
- 李富(中文/中日韩字符在Unicode中占很大一部分)
它目前不接受这些名称:
太空人超人
(名字前面的空格)天哪
(名字后面有空格)Johnny Appleseed
(两个空格)-- '+
( Not Acceptable 字符)Mulliganaceous2 Shogun
(仅限数字,\p{L}
)Pokemon Porygon2
(仅限数字,\p{L}
)
关于兼容性和 \w
转义(编辑:提问者特别想排除带数字的名字)
如果 \p{L}
不起作用,您可以尝试 /^[\w'\-\.]+( [\w'\-\.] +)*$/u
.
\w
匹配所有 ASCII 单词字符包括 数字和下划线:[A-Za-z0-9_]
- 是否包含重音字符和来自其他脚本的字符之间存在不一致。
- 一些正则表达式引擎包含 CJK 字符,而其他引擎仅包含 ASCII 单词字符。
- 如果排除了特殊字符,您可能需要手动添加它们。
- 您还可以包含一系列 Unicode 字符:
- 要包含中文字符,请使用
[\u4E00-\u9FFF]
- 要包含中文字符,请使用
- 在某些引擎上也可以使用交集:
[\w'\-\.&&[\D]]
表示所有单词、撇号、连字符和句号的字符类,但不是数字。