我需要在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的数字。
以下是有效车辆编号的一些示例:
和一些无效的(有理由):
答案 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