想要一个正则表达式验证印度车牌号码格式吗?

21

大家好,

我需要开发一个与车辆注册相关的Swing应用程序,在其中我想输入印度标准车辆号码,例如:

MP 09 AB 1234

AH 17 FT 2387

UT 32 DR 6423

DL 01 C AA 1111

更具体地说,

请问有谁能帮助我吗? DocumentFilter 类型的类也可以帮助我.........

12个回答

47

根据维基百科规范

^[A-Z]{2}[ -][0-9]{1,2}(?: [A-Z])?(?: [A-Z]*)? [0-9]{4}$
  • 车牌号的前两个字母表示该车所注册的州。
  • 接下来的两个数字是该地区的序列号。由于车辆注册量大,这些数字也会分配给注册办公室。
  • 第三部分是每个车牌独有的4位数字。当4位数字用完后,会加上一个或多个字母;然后再加上两个字母等等。
  • 在一些邦(例如德里联邦领地、以及早期的古吉拉特邦和比哈尔邦)中,地区代码的开头0会被省略,因此德里地区2的数字显示为DL 2而不是DL 02。
  • 德里国家首都领地在注册编码中还有一个额外的代码:DL 01 C AA 1111

4
+1 验证官方规格,问题中的示例并不涵盖所有情况。 - Swift-Tuttle
大家好,非常感谢你们,Alix的回答正是我需要的......但对于这个正则表达式,我只能检查已输入的字符串,但如果我在文本框输入的时候就加强了该正则表达式呢?这样用户除了符合格式的内容外,就不能输入错误的内容了吗?实际上,我想要的是根据这个正则表达式来限制输入……希望我表达得清楚明白……有办法这么做吗? - Asif
1
@Asif:在 jQuery 出现之前的黑暗岁月里,我使用过 TMT Validator。它支持随时验证输入内容,你可以查看 http://www.massimocorner.com/libraries/validator/samples/custom_filters.htm。不过现在可能有更好的与 jQuery 类似的方法了。 - Alix Axel
@AlixAxel 这个正则表达式可以接受 "MH-01 FY 9090",但不能接受 "MH-01-FY-9090",请问如何让它同时接受连字符和空格。 - MaNn
1
@AlixAxel: 试着理解 (?: [A-Z])?(?: [A-Z]*)? 这个表达式。第二个表达式 (?: [A-Z]*)? 如果有0或多个字符将匹配成功。所以这将匹配 DL 1 ABCDEF 1234。难道我们不应该将其写成 (?: [A-Z]{0,2})?吗?如果我没有正确理解表达式,请纠正我。 - Mrudang Vora
显示剩余2条评论

13

试试这个

^[A-Z]{2}\s[0-9]{2}\s[A-Z]{2}\s[0-9]{4}$

^ 表示字符串的开头
[A-Z]{2} 表示 A 到 Z 的两个字符
\s 表示空格
[0-9]{2} 表示 0 到 9 的两个数字字符
\s 表示空格
[A-Z]{2} 表示 A 到 Z 的两个字符
\s 表示空格
[0-9]{4} 表示 0 到 9 的四个数字字符
$ 表示字符串的结尾

根据您在问题中提到的内容,这应该是一个非常广泛的正则表达式检查车牌照格式是否正确,但我感觉可能有更具体的规定来确定车牌号码的编码方式。如果有其他限制,请让我知道。


5

如果你正在寻找车牌号码(VRN),那么请使用以下正则表达式:

^[A-Z|a-z]{2}\s?[0-9]{1,2}\s?[A-Z|a-z]{0,3}\s?[0-9]{4}$

4

印度车牌号码格式如下:

GJ 01 AA 1234 或者 KA 08 J 9192 或者 (新印度系列)例如22 BH 1234 AB 22 BH 1234 A

您可以使用以下两个正则表达式进行验证:

1) ^[A-Z]{2}[0-9]{2}[A-HJ-NP-Z]{1,2}[0-9]{4}$
2) ^[0-9]{2}BH[0-9]{4}[A-HJ-NP-Z]{1,2}$

根据道路交通管理局的规定:

在RTO系列中,字母'I'和'O'被排除在外,以避免与数字0或1混淆。


1
Bharat系列的正则表达式应为 ^[0-9]{2}BH[0-9]{4}[A-HJ-NP-Z]{1,2}$。我见过只有一个字母结尾的情况。例如 22BH4928A,这是一个有效的BH系列号码。在此推文中还可以看到另一个示例 https://twitter.com/satejp/status/1453291407217676295。 - risahbhc32

2
AP-05-BJ-9353
TN-35-AB-638
MH-03-C-3843

表达式:

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

在这里检查表达式:https://regexr.com/


2

是的,每个组之间有一个空格,请参见http://rubular.com/r/cgEeUKg5qX。 - Fredrik Pihl
啊,不好意思。我之前尝试使用JS和C#来代替\s使用空格,但出于某种原因我认为那样行不通。 - MoarCodePlz

0

只需检查其中是否仅包含空格...

  function isValidNumber($Number){
         $pattern = "^[a-zA-z]{2}\s[0-9]{2}\s[0-9]{4}$";
         if (eregi($pattern, $Number)){
            return true;
         }
         else {
            return false;
        }
    }

1
你漏掉了第二组字母。 - MoarCodePlz
大家好,非常感谢你们,你们的答案完美地解决了我的问题......但是对于这个正则表达式,我只能检查已经输入的字符串,但如果我在文本框输入时根据这个正则表达式限制用户呢?这样用户就不能输入除符合此格式之外的任何错误内容了。实际上,我想要根据这个正则表达式来限制输入....希望我表达清楚了.....有没有办法做到这一点呢? - Asif

0

比如说,如果用户已经输入了一个值:

DL 

那么文本框就不能接受除整数或一个以上的字符以外的任何输入了......

DL C 

用户只能在此处输入整数值............

因此,简而言之,我想要做的就是像Alix给出的正则表达式一样仅接受输入。

基于维基百科规格

^[A-Z]{2}[ -][0-9]{1,2}(?: [A-Z])?(?: [A-Z]*)? [0-9]{4}$

0
如果您正在寻找子字符串中的车牌号码,则可以使用以下正则表达式。
.*?([A-Za-z]{2})(\d{2})([A-Za-z]{2})(\d{4}).*?

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


以上的正则表达式适用于以下类型:
DL 01 AA 1111
DL 0 AA 1111
DL 1 A 1111
DL 0 A 11
DL 01 AA 111

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接