【问题标题】:Javascript Regex: Testing string for intelligent queryJavascript Regex:智能查询的测试字符串
【发布时间】:2011-01-02 16:32:58
【问题描述】:

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

  • 一个六位数的 ID
  • 包含 4 位数字和两个字母数字字符的邮政编码
  • 名称(仅限字符)

当我使用此字符串搜索数据库时,查询类型取决于搜索类型,我想使用 JavaScript 处理服务器端(是的,我正在使用 JavaScript 服务器端)。在 StackOverflow 上搜索,给我带来了一些有趣的信息,比如 .test-method,这似乎非常适合我的需求。测试方法根据使用正则表达式对象对字符串的评估返回真或假。

我使用此页面作为参考: http://www.javascriptkit.com/jsref/regexp.shtml

所以我试图通过使用以下非常愚蠢的正则表达式来确定邮政编码。

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 */
> 

非常感谢您的帮助!

【问题讨论】:

    标签: javascript regex string evaluation


    【解决方案1】:
    /([^a-z]|^)[a-z]{2}([^a-z]|$)/i
    

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

    第 2 部分:[a-z]{2} ...两个字母

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

    /i ... 不区分大小写

    【讨论】:

    • 啊,这个比较像。你能分解这里发生的事情吗?在我的 JSC 中,它就像一种幸福。
    • 感谢您的解释,我根据需要重构了您的正则表达式:/^\d{4}[a-z]{2}$/
    【解决方案2】:
    var r = /[A-Za-z]{2,2}/
    

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

    不,这表示 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}$/;
    

    注意在这两种情况下都使用了锚点,以确保在匹配之前或之后没有任何其他字符。

    【讨论】:

    • 哇。 {,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 意味着这根本不是我想要发生的结果。也许从你的角度来看,我的问题很模糊,但我也提供了我想要实现的信息。使用此正则表达式,可能会与其他类型的搜索查询发生冲突。不要误会我的意思,我很感谢您的回答和解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多