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

时间:2010-03-12 11:41:50

标签: php javascript regex

我需要在Javascript和PHP中使用正则表达式,用于印度车辆NUMBER。

以下是条件清单:

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

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

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

  • 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((y)和(b)应相同)。
  • RJ-07 M3-1234((a)必须以字母结尾)。
  • rj-07 3M-123((c)的长度必须为4)。

3 个答案:

答案 0 :(得分:1)

这是正则表达式......这在大多数/所有语言中应该是安全的:

([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})

我将正则表达式重复两次并且中间带有“或”的原因是为了满足“(y)和(b)应该相同的标准。”

答案 1 :(得分:1)

您不需要使用正则表达式解决每个问题,您可以使用代码轻松检查它。除了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而您的第二个示例表示 last 必须是alpha。

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

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

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

(如果您还需要小写,请进行调整)但仍然维护良好布局的非正则表达式代码更易于维护。

答案 2 :(得分:0)

尝试:

<?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
相关问题