如何将PAN正则表达为渐进正则表达式

时间:2016-06-28 11:09:18

标签: javascript angularjs regex

我想制作PAN编号的渐进式正则表达式。

我的PAN编号正则表达式为"/^([a-zA-Z]){5}([0-9]){4}([a-zA-Z]){1}$/"

PAN编号的格式 - ' AAAAADDDDA' A-字母,D-数字

为什么我要制作渐进式正则表达式?

我正在使用angular指令在输入字段上设置验证。因为我面临着我的PAN正则表达式的问题,但它适用于渐进式正则表达式。在这里查看我的plunker

推荐问题angularjs validate input and prevent change if invalid

任何人都可以建议我怎么做?

谢谢。

3 个答案:

答案 0 :(得分:1)

我认为这应该可以帮到你:

regexp = /^([a-zA-Z]([a-zA-Z]([a-zA-Z]([a-zA-Z]([a-zA-Z]([0-9]([0-9]([0-9]([0-9]([a-zA-Z])?)?)?)?)?)?)?)?)?)?$/;

因为您逐渐想要测试正则表达式,这就是为什么它要逐字测试输入的原因。 ([a-zA-Z]){5}< - 这意味着它需要5个字母(同时全部),因为您正在测试每个字母输入的原因,以及它不起作用的原因。

例如:

根据你的正则表达式,

AAAAA1111A是正确的 AAAAA1111AAAAA111AAAAA11AAAAA1等不是,这就是为什么你的正则表达式不允许输入的原因!

http://plnkr.co/edit/x9x1ZT4InGHHo2f2ZL8f?p=preview

答案 1 :(得分:0)

用于javascript中的平移验证正则表达式的是

让regExpe = / ^([AZ]){3}(C | P | H | F | A | T | B | L | J | G){1}([AZ]){1 }([0-9]){4}([AZ]){1}?$ /;

返回regExpe.test(pan);

正则表达式的解释

([[A-Z]){3}:-前三个字符可以在仅A-Z之间大写

(C | P | H | F | A | T | B | L | J | G){1}:-第四个字符具有特殊含义

即C代表Corporate,P代表Personal等。

([[A-Z]){1}:-第五个字符可以在仅A-Z之间大写

([[0-9]){4}:下四个字符是数字,因此它检查这四个字符应该是数字

([[A-Z]){1}:-最后一个字符也仅表示大写字母

之后,最后我通过使用javascript函数

返回true和false的输出。

返回regExpe.test(pan); (如果pan按照正则表达式返回true,否则返回false)

答案 2 :(得分:-1)

可以与matches()一起使用的正则表达式是根据用户的附加输入形成的,并且后台检查前面的第4个字符。如果第四个字母是P,我们检查姓氏中的第一个字母,如果第四个字母不是P,我们检查实体名称中的第一个字母:

String rx = "[A-Z]{3}([CHFATBLJGP])(?:(?<=P)" + c1 + "|(?<!P)" + c2 + ")[0-9]{4}[A-Z]";

示例代码

String c1 = "S"; // First letter in surname coming from the EditText (with P before)
String c2 = "F"; // First letter in name coming from another EditText (not with P before)
String pan = "AWSPS1234Z"; // true
System.out.println(pan.matches("[A-Z]{3}([CHFATBLJGP])(?:(?<=P)" + c1 + "|(?<!P)" + c2 + ")[0-9]{4}[A-Z]"));
pan = "AWSCF1234Z"; // true
System.out.println(pan.matches("[A-Z]{3}([CHFATBLJGP])(?:(?<=P)" + c1 + "|(?<!P)" + c2 + ")[0-9]{4}[A-Z]"));
pan = "AWSCS1234Z"; // false
System.out.println(pan.matches("[A-Z]{3}([CHFATBLJGP])(?:(?<=P)" + c1 + "|(?<!P)" + c2 + ")[0-9]{4}[A-Z]"));

Click here