我想制作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
任何人都可以建议我怎么做?
谢谢。
答案 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
是正确的
AAAAA1111
或AAAAA111
或AAAAA11
或AAAAA1
等不是,这就是为什么你的正则表达式不允许输入的原因!
答案 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]"));