代码之家  ›  专栏  ›  技术社区  ›  xkeshav

javascript和php中印度车辆编号的正则表达式

  •  3
  • xkeshav  · 技术社区  · 14 年前

    我需要一个JavaScript和PHP中的正则表达式来表示印度车辆编号。

    以下是条件列表:

    (x)(y)(z)(m)(a)(b)(c)
    

    1. (x)仅包含长度为2的字母。
    2。 (Y)可能是 - 或单个空间 ' ' .
    三。 (z)仅包含长度为2的数字。
    4。 (m)可以是或 , 或单个空间 .
    5。 (a)必须是一个或两个字母数字,后跟一个字母。
    6。 (b)必须与(y)相同。
    7。 (c)仅包含长度为4的数字。

    以下是一些有效车辆编号的示例:

    • RJ-14、NL—1234
    • RJ-01,4M 584
    • RJ-0714M
    • RJ073M 2345
    • RJ-073M 88 88
    • RJ 07 4M 2345
    • RJ074M 2933

    还有一些无效的(有原因的):

    • RJ-07 3M 1234(Y和B应相同)。
    • RJ-07 M3-1234((a)必须以字母结尾)。
    • RJ-07 3M-123(长度(c)必须为4)。
    3 回复  |  直到 14 年前
        1
  •  1
  •   Timothy Khouri    14 年前

    这是雷杰克斯……这在大多数/所有语言中应该是安全的:

    ([a-z]{2}-\d{2}[ ,][a-z0-9]{1,2}[a-z]-\d{4})|([a-z]{2} \d{2}[ ,][a-z0-9]{1,2}[a-z] \d{4})
    

    我之所以让regex重复两次,中间有一个“or”,是为了满足您的条件,即“y和b都应该相同”。

        2
  •  1
  •   paxdiablo    14 年前

    你不需要解决 每一个 正则表达式有问题,您可以很容易地用代码检查它。除了5号以外,其他的都很简单,所以您可以使用:

    ^[A-Z]{2}[ \-][0-9]{2}[ ,][A-Z0-9]{2,3}[ \-][0-9]{4}$
    

    然后,检查字符7和8(如果总长度是14而不是13,则为9)作为条件编号5。并检查位置3和7是否相同。

    检查这种旧样式所需的代码可能比执行相同操作的正则表达式可读性(和可维护性)高得多。


    在重新阅读问题时,条件5和6似乎有混淆。条件5听起来像 任何 其中两个或三个字符可以是alpha,而您的第二个示例指示 最后的 必须是阿尔法。

    条件6“相似”一词的使用表示 条件 类似,而第一个示例指示字符必须是 完全相同的 .

    如果示例正确,可以使用:

    ^[A-Z]{2}([ \-])[0-9]{2}[ ,][A-Z0-9]{1,2}[A-Z]\1[0-9]{4}$
    

    (如果你也需要小写字母的话也可以调整)但是我 仍然 保持布局良好的非regex代码更易于维护。

        3
  •  0
  •   codaddict    14 年前

    尝试:

    <?php
    $arr = array("RJ-14,NL-1234", "RJ-01,4M-5874", "RJ-07,14M-2345", "RJ 07,3M 2345", "RJ-07,3M-8888", "RJ 07 4M 2345", "RJ 07,4M 2933","RJ-07 3M 1234","RJ-07 M3-1234","rj-07 M3-123");
    
    foreach($arr as $str) {
        if(preg_match('/[a-z]{2}( |-)\d{2}(?: |,)(?:[a-z\d]{1,2}[a-z])\1\d{4}/i',$str))
            print "$str\tYES\n";
        else
            print "$str\tNO\n";
    }
    
    ?>
    

    输出:

    RJ-14,NL-1234   YES
    RJ-01,4M-5874   YES
    RJ-07,14M-2345  YES
    RJ 07,3M 2345   YES
    RJ-07,3M-8888   YES
    RJ 07 4M 2345   YES
    RJ 07,4M 2933   YES
    RJ-07 3M 1234   NO
    RJ-07 M3-1234   NO
    rj-07 M3-123    NO