2017-04-19 199 views
0

我有这样的正则表达式:^[a-zA-Z]\s{3,16}$正则表达式空格字符

我想是与任何空间相匹配的任何名称,例如John Smith,且包含长3至16个字符..

上午什么我做错了?

+5

此时表达式匹配单个字符'a'到'z'(小写或大写),后跟3到16个空格。量词只适用于'\ s'。 –

+0

当试图调试正则表达式时 - 不要过去像https://www.debuggex.com/r/GFfROJSrQEMa2mta这样的网站,它可以帮助您快速找到问题。 – Shadow

+0

@shadow这是一个漂亮的小工具。我也喜欢regex101.com。它是完全免费的。 – c1moore

回答

1

背景

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

二,名称可以有超过2个部分(中间名,某些民族名称,如“德拉克鲁兹”)或包括特殊字符,如重音元音。你应该考虑这是你在程序中需要考虑的事情。这些事情很重要,应该考虑任何真实应用程序。

假设和回答

现在,就让我们假设你只想要的名字一定的格式,由一个名字,姓氏,和空间。假设您只需要简单的ASCII字符(即没有特殊字符或重音字符)。此外,名字和姓氏都应以大写字母开头,后跟小写字母。除此之外,名称的各个部分的长度没有限制。后^字符是所谓的positive lookahead

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

注意

第一令牌:在这种情况下,下面的正则表达式会做的伎俩。基本上,积极的展望将匹配开头(?=和结束)之间的正则表达式,而不实际移动与该字符串匹配的游标的位置。

通知我删除了\s的道理,因为你通常(空间)。如果需要制表符和其他空格,那么可以使用\s标记替换空间。

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

原油翻译

以帮助理解,这里是一个什么样的正则表达式是真正做一个简单的英文翻译。斜体部分只是从正则表达式的英文翻译的第一部分复制而来。

“相匹配的有3-16个字符,并以大写字母字符后面跟着一个或多个(+)开始字母字符后跟一个空格,然后大写字母字符后面跟着一个或多个任意字符串(+)字母字符并以任何小写字母结尾。“

工具

有一对夫妇的工具,我想,当我试图解决一个具有挑战性的正则表达式来使用。他们被列在下面没有特定的顺序:

编辑/更新

您在您的意见,您使用的是JavaScript中您正则表达式提及。 JavaScript使用围绕正则表达式的正斜杠来确定什么是正则表达式。对于这个简单的例子,使用正则表达式来匹配一个字符串有两个选项。

首先,使用String的比赛方法如下

"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

+0

谢谢你所有的解释,现在我清楚了,它在我的程序中工作得很好。谢谢 –