[英]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.