[英]How to make regular expression of PAN to progressive regular expression
我想制作 PAN 号码的渐进式正则表达式。
我的 PAN 号码正则表达式是"/^([a-zA-Z]){5}([0-9]){4}([a-zA-Z]){1}$/"
PAN 号码格式 -'AAAAADDDDA' A- 字母,D- 数字
为什么我要制作渐进式正则表达式?
我正在使用角度指令在输入字段上设置验证。 因为我的 PAN 正则表达式面临问题,但它适用于渐进式正则表达式。 在这里检查我的plunker
参考问题angularjs validate input and prevent change if invalid
谁能建议我怎么做?
谢谢你。
我认为这应该对你有所帮助:
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
等不是,这就是为什么你的正则表达式不允许输入!
在javascript中用于泛验证正则表达式
let regExpe = / ^([AZ]){3}(C | P | H | F | A | T | B | L | J | G){1}([AZ]){1}([0-9 ]){4}([AZ]){1} $ /?;
return regExpe.test(pan);
正则表达式的解释
([AZ]){3}: - 前三个字符可以介于仅AZ资本之间
(C | P | H | F | A | T | B | L | J | G){1}: - 第四个字符有特殊含义
即C代表Corporate,P代表Personal等。
([AZ]){1}: - 第五个字符可以介于仅AZ资本之间
([0-9]){4}:接下来的四个字符是数字,因此它检查这四个字符应该是数字
([AZ]){1}: - 最后一个字符也只表示大写字母
最后我通过使用javascript函数返回true和false的输出
return regExpe.test(pan); (如果pan是regex则返回true,否则返回false)
^([AZ]{3}[P]{1}[AZ]{1}[0-9]{4}[AZ]{1})?$
我可以给你这段代码:
<input
data-ng-class="{'invalid-field-box': hasError( 'panCardInput' ) }"
name="panCardInput"
class="form-control ng-valid ng-scope ng-touched ng-dirty ng-valid-parse ng-not-empty"
data-ng-model="registration.panNumber"
ng-disabled="(alreadyLoggedIn && ( !profileFromOtherSource || profileConfirmedFlag == 'Y' ) && ( !profileCreatedByRecruiter || profileConfirmedFlag == 'Y' ) ) ||
RoleQuery.isOfferInitiated() || RoleQuery.isResumeShortlisted()"
regex="^([A-Z]{3}[P]{1}[A-Z]{1}[0-9]{4}[A-Z]{1})?$"
regex-msg="PancardCheck.error.regex"
max-length="10"
type="text"
placeholder="Pan Card Number"
input-validate=""
style=""
/>
此代码来自 Tata 的网站,很确定他们知道自己在做什么。 他们经常更新他们的验证。
可以与matches()一起使用的正则表达式是根据用户的附加输入形成的,并且后台检查前面的第4个字符。 如果第4个字母是P,我们检查姓氏中的第一个字母,如果第4个字母不是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]"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.