regex - 如何编写允许单词之间有一个空格的正则表达式?
问题描述
这是用户全名的正则表达式,所以我想允许空格。另外,我使用以下正则表达式只允许 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
(可以在此处验证测试):
Johnny Appleseed
Martin Harding-Rolls
Daniel O'Brian
IJsbrand van 't IJsselstein
Euclid
Jalapeño Arriba
(您可能需要将 ñ 添加到列表中)S.L.IJ.M.B.A.L P.U.I.S.T
Paul Erdős
(您可能需要将匈牙利重音字母添加到列表中)на русском
- 李富(中文/CJK字符在Unicode中占很大一部分)
它目前不接受这些名称:
Spaceman Superman
(姓名前的空格)OMG
(名字后面的空格)Johnny Appleseed
(两个空格)-- '+
(不可接受的字符)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]]
表示所有单词、撇号、连字符和句点的字符类,但不是数字。
推荐阅读
- r - 在 AWS EC2 ubuntu 20.4 上安装闪亮失败
- c# - NLog 不会在控制台应用程序中写入数据库
- c - malloc 如何知道返回的指针指向的类型?
- html - 如何使用传单和地理服务器正确显示我的 shp?
- python - 当我在 selenium 中使用 Click() 时,页面中的动态元素(表)未更新,因此我无法检索新数据
- linux-kernel - 僵尸进程是否仍然占据父子列表中的一个条目?
- c# - 将 CommandBar 添加到 xaml UWP 中当前歌曲列表的顶部。多次设置“内容”属性
- python - 如何可视化 k 最近邻分类器的测试样本?
- swift - NSPersistentStoreCoordinator 在 container.loadPersistentStores 之后没有初始化
- sql - 如何将 R 中的数据框读入现有的 SQL 表?