繁体   English   中英

RegExp空格字符

[英]RegExp space character

我有这个正则表达式: ^[a-zA-Z]\\s{3,16}$

我想要的是将任何名称与任何空格匹配,例如John Smith,并且包含3到16个字符的长度。

我究竟做错了什么?

背景

这里有几件事要注意。 首先,量词(在这种情况下为{3,16} )仅适用于最后一个正则表达式标记。 因此,您当前的正则表达式实际上是在说“匹配具有单个字母字符(不区分大小写),然后是3到16个空格字符(例如空格,制表符等)的任何字符串”。

其次,一个名称可以包含两个以上的部分(中间名,某些民族名称,例如“ De La Cruz”),也可以包含特殊字符(如重音元音)。 您应该考虑这是否需要在程序中考虑。 这些东西很重要,在任何实际应用中都应考虑。

假设与答案

现在,假设您只希望名称的某种格式包含名字,姓氏和空格。 我们还假设您只需要简单的ASCII字符(即没有特殊字符或带重音符号的字符)。 此外,名字和姓氏均应以大写字母开头,之后只能是小写字母。 除此之外,名称各部分的长度没有限制。 在这种情况下,以下正则表达式可以解决问题:

^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$

笔记

^字符后的第一个标记是正向超前 基本上,正面看将在开孔(?=和close )之间匹配正则表达式,而无需实际移动与字符串匹配的光标的位置。

请注意,我删除了\\s令牌,因为您通常只需要一个 (空间)。 如果需要制表符和其他空格,则可以用\\s标记替换该空格。

我还添加了一个限制,即名称必须以大写字母开头,之后只能是小写字母。

粗略的英语翻译

为了帮助您理解,这里是正则表达式实际作用的简单英文翻译。 斜体部分只是从正则表达式的英语翻译的第一部分复制而来。

“匹配具有3至16个字符的任何字符串,并以大写字母字符开头,然后是一个或多个( + )字母字符,然后是单个空格,然后是大写字母字符,然后是一个或多个( + )字母字符,并以结尾带有任何小写字母。”

工具类

当我尝试解决具有挑战性的正则表达式时,有几种工具可以使用。 以下未按特定顺序列出它们:

编辑/更新

您在评论中提到正在JavaScript中使用正则表达式。 JavaScript使用正则表达式周围的正斜杠来确定什么是正则表达式。 对于这种简单的情况,有2个使用正则表达式匹配字符串的选项。

首先,使用String的match方法,如下所示

"John Smith".match(/^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$/);

其次,创建一个正则表达式并使用其test()方法。 例如,

/^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$/.test("John Smith");

后者可能是您想要的,因为它仅取决于正则表达式是否实际匹配字符串而返回truefalse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM