簡體   English   中英

如何將PAN的正則表達式變成漸進式正則表達式

[英]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根據您的正則表達式是正確的,但AAAAA1111AAAAA111AAAAA11AAAAA1等不是,這就是為什么你的正則表達式不允許輸入!

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

在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 &amp;&amp; ( !profileFromOtherSource || profileConfirmedFlag == 'Y' ) &amp;&amp; ( !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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM