Javascript正则表达式:智能查询的测试字符串

Javascript正则表达式:智能查询的测试字符串,javascript,regex,string,evaluation,Javascript,Regex,String,Evaluation,我有一个保存用户输入的字符串。此字符串可以包含各种类型的数据,如: 六位数的身份证 包含四位数字和两个字母数字字符的zipcode 名称(仅限字符) 当我使用这个字符串在数据库中搜索时,查询类型取决于搜索类型,我希望使用JavaScript处理服务器端(是的,我使用JavaScript服务器端)。搜索StackOverflow,给我带来了一些有趣的信息,比如.test方法,它似乎非常适合我的需要。测试方法根据使用正则表达式对象对字符串的求值返回true或false 我将此页用作参考: 所以

我有一个保存用户输入的字符串。此字符串可以包含各种类型的数据,如:

  • 六位数的身份证
  • 包含四位数字和两个字母数字字符的zipcode
  • 名称(仅限字符)
当我使用这个字符串在数据库中搜索时,查询类型取决于搜索类型,我希望使用JavaScript处理服务器端(是的,我使用JavaScript服务器端)。搜索StackOverflow,给我带来了一些有趣的信息,比如.test方法,它似乎非常适合我的需要。测试方法根据使用正则表达式对象对字符串的求值返回true或false

我将此页用作参考:

所以我试图通过使用下面的noobish正则表达式来确定zipcode

var r=/[A-Za-z]{2,2}/

据我所知,这应该将字母数字字符的出现次数限制为最多两个。请参见下面我的JavaScript控制台的输出

> var r = /[A-Za-z]{2,2}/
> var x = "2233AL"
> r.test(x)
true
> var x = "2233A"
> r.test(x)
false
> var x = "2233ALL"
> r.test(x)
true  /* i want this to be false */
> 
如果您能帮我一点忙,我将不胜感激

据我所知,这应该将字母数字字符的出现次数限制为最多两个

不,这意味着在A-Z或A-Z中至少应该有两个字母,并且它们必须是连续的。比赛前后可能还会有更多的字母。语法
{2,2}
也是多余的-您可以简单地使用
{2}
,这意味着相同的事情

此正则表达式确保a-Z或a-Z中最多有两个字母:

var r = /^[^A-Za-z]*([A-Za-z][^A-Za-z]*){0,2}$/;
这表示一个或多个数字后跟两个字母:

var r = /^\d+[A-Za-z]{2}$/;
请注意,在这两种情况下都使用锚定,以确保匹配前后没有任何其他字符

/([^a-z]|^)[a-z]{2}([^a-z]|$)/i
据我所知,这应该将字母数字字符的出现次数限制为最多两个

不,这意味着在A-Z或A-Z中至少应该有两个字母,并且它们必须是连续的。比赛前后可能还会有更多的字母。语法
{2,2}
也是多余的-您可以简单地使用
{2}
,这意味着相同的事情

此正则表达式确保a-Z或a-Z中最多有两个字母:

var r = /^[^A-Za-z]*([A-Za-z][^A-Za-z]*){0,2}$/;
这表示一个或多个数字后跟两个字母:

var r = /^\d+[A-Za-z]{2}$/;
请注意,在这两种情况下都使用锚定,以确保匹配前后没有任何其他字符

/([^a-z]|^)[a-z]{2}([^a-z]|$)/i
第1部分:([^a-z]|^)。。。没有字母或字符串的开头

第二部分:[a-z]{2}。。。两封信

第三部分:([^a-z]|$)。。。没有字母或字符串的结尾

/我。。。不区分大小写

第1部分:([^a-z]|^)。。。没有字母或字符串的开头

第二部分:[a-z]{2}。。。两封信

第三部分:([^a-z]|$)。。。没有字母或字符串的结尾


/我。。。不区分大小写。{,2}能保证吗?除了复制粘贴之外,我还想学习正则表达式部分:)语法
{0,2}
意味着零,一个或两个匹配项.var r=/^[^A-Za-z]*([A-Za-z][^A-Za-z].{0,2}$/>x=“2233ab”2233ab>r.test(x)true>x=“2233a”2233a>r.test(x)true>x=“2233”2233>r.test(x)true@Shyam:yikes的意思也是这样吗,我忘记在我的问题中提及,但我希望它与0个字母不匹配。只有当有一两个字母时,它才会成功。有可能吗?如果是这样,请使用{1,2}而不是{0,2}。Yikes意味着这根本不是我想要的结果。也许从你的角度来看,我的问题很模糊,但我也提供了我想要实现的信息。使用此正则表达式可能会与其他类型的搜索查询发生冲突。别误会,我很感谢你的回答和解释。{,2}能保证吗?除了复制粘贴之外,我还想学习正则表达式部分:)语法
{0,2}
意味着零,一个或两个匹配项.var r=/^[^A-Za-z]*([A-Za-z][^A-Za-z].{0,2}$/>x=“2233ab”2233ab>r.test(x)true>x=“2233a”2233a>r.test(x)true>x=“2233”2233>r.test(x)true@Shyam:yikes的意思也是这样吗,我忘记在我的问题中提及,但我希望它与0个字母不匹配。只有当有一两个字母时,它才会成功。有可能吗?如果是这样,请使用{1,2}而不是{0,2}。Yikes意味着这根本不是我想要的结果。也许从你的角度来看,我的问题很模糊,但我也提供了我想要实现的信息。使用此正则表达式可能会与其他类型的搜索查询发生冲突。别误会我,我很感谢你的回答和解释。啊,这更像是这样。你能把这里发生的事情说清楚吗?在我的JSC中,它工作得很好。由于你的解释,我根据我的需要重构了你的正则表达式:/^\d{4}[a-z]{2}$/Ah,这更像是这样。你能把这里发生的事情说清楚吗?在我的JSC中,它工作得很好。由于您的解释,我根据我的需要重构了您的正则表达式:/^\d{4}[a-z]{2}$/