Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript和php中印度车辆编号的正则表达式_Php_Javascript_Regex - Fatal编程技术网

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

javascript和php中印度车辆编号的正则表达式,php,javascript,regex,Php,Javascript,Regex,我需要一个正则表达式在Javascript,以及在PHP,为印度车辆号码 以下是条件列表: (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-

我需要一个正则表达式在Javascript,以及在PHP,为印度车辆号码

以下是条件列表:

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

    • 这是正则表达式。。。这在大多数/所有语言中都是安全的:

      ([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)应该相同的标准。

      < p>你不需要用正则表达式来解决每个问题,你可以很容易地用代码检查它。除了数字5外,其他都很简单,因此您可以使用:

      ^[A-Z]{2}[ \-][0-9]{2}[ ,][A-Z0-9]{2,3}[ \-][0-9]{4}$
      
      然后检查条件编号5的字符7和8(如果总长度为14而不是13,则检查字符9)。并检查位置3和7是否相同

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


      在重新阅读问题时,第5条和第6条似乎出现了混乱。条件5使它听起来像两个或三个字符中的任何一个都可以是alpha,而第二个示例表明最后一个字符必须是alpha

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

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

      ^[A-Z]{2}([ \-])[0-9]{2}[ ,][A-Z0-9]{1,2}[A-Z]\1[0-9]{4}$
      
      (如果您还需要小写,请进行调整)但我仍然认为布局良好的非正则表达式代码更易于维护。

      试试:

      <?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";
      }
      
      ?>
      

      用什么编程语言?@Timothy,从用户名来看:PHP。你可能需要澄清你的情况。我认为(6)应该改为“b必须与y相同”,以及(5)“a必须是一个或两个字母数字,后跟一个字母”。我是从你的测试数据中收集到的,这些数据并不完全符合条件。@paxdiablo我已经根据你的建议编辑了我的问题。.很抱歉英语不好,可能你的数据集不包含这些,但是
      KL-08 A 2319
      KL-08 AB 8756
      等在印度是有效的车辆编号-更不用说旧的编号系统了,像
      KVK 2087
      (基本上与
      [A-Z]{3}\d{1,4}
      匹配的东西也是有效的)。使用
      也可以接受特殊字符。这就是我不知道的原因want@ILikePHP,这并不重要,因为我建议检查(条件6)是否与正则表达式分开。但我会把它们放回去让你开心。这并不能免除您检查那些超出正则表达式范围的条件的必要性。@paxdiablo,是的,您是对的正则表达式有时真的会导致死亡,我改变了使用RE的想法
      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