代码之家  ›  专栏  ›  技术社区  ›  Michael Paulukonis

这个正则表达式(VBScript/JavaScript风格)有什么问题?

  •  3
  • Michael Paulukonis  · 技术社区  · 14 年前

    我尝试在VBA代码中运行一个正则表达式,它使用MicrosoftVBScript正则表达式5.5(应该与JavaScript正则表达式相同)。

    ^[0-9A-Z]?[0-9A-Z]{3}[A-Z]?([0-9A-Z]{6})-?([0-9])?$
    输入: X123A1234567
    匹配: 123456

    123456

    但是当两个可选部分都没有了(它们

    好的:

    输入: 123123456 匹配: 123456

    没有字母,没有校验数字。很般配。

    很好

    123A1234567
    匹配: 123456

    123456

    很好

    X1231234567
    匹配: 123456

    留下可选的前导字母,去掉中间的可选字母,留下检查数字,我们仍然得到一个很好的匹配

    坏的

    输入: 1231234567
    匹配: 234567

    234567 .

    看看上面的正则表达式测试程序 http://www.regular-expressions.info/javascriptexample.html http://www.regular-expressions.info/vbscriptexample.html .

    我错过了什么,这里?当两个可选字母都丢失时,如何使正则表达式忽略最后一个数字?正则表达式用于为查找系统提供数据,因此无论输入数据的格式如何,我们都可以匹配到一个完整的值。

    更新:以上示例中没有一个包含连字符(在regex中显示)。带连字符和校验位的输入数据始终匹配。

    正则表达式: ^[A-Z]?[0-9]{3}[A-Z]?([0-9]{6})-?([0-9])?$

    3 回复  |  直到 14 年前
        1
  •  2
  •   Tim Pietzcker    14 年前

    如果去掉可选的前导alpha 1 [0-9A-Z]? 并且没有理由放弃它,因为整个正则表达式匹配-毕竟最后一个数字在正则表达式中是可选的。

    ?

    或者做正则表达式的第一部分 [A-Z]? 所以它永远不会匹配一个数字-如果这符合你的规则。

        2
  •  1
  •   Dan    14 年前

    ? $

        3
  •  0
  •   Cfreak    14 年前

    ([0-9A-Z]{6})\d$
    

    我也不确定你是否需要-?。你的输入数据都没有显示(但你可以加上)