javascript 如何将PAN的正则表达式转化为渐进式正则表达式

t0ybt7op  于 2022-12-21  发布在  Java
关注(0)|答案(4)|浏览(149)

我想做PAN数的渐进正则表达式。
我的PAN编号正则表达式是"/^([a-zA-Z]){5}([0-9]){4}([a-zA-Z]){1}$/"
PAN编号格式-"AAAAADDDDA" A-字母,D-数字
为什么我想做渐进正则表达式?
我正在使用Angular 指令来设置输入字段的验证。在这方面,我面临的问题,我的泛正则表达式,但它的工作很好的渐进正则表达式。检查这里我的plunker
参考问题angularjs validate input and prevent change if invalid
有谁能给我提个建议吗?
谢谢你。

ryevplcw

ryevplcw1#

我想这会对你有帮助:

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

ymdaylpp

ymdaylpp2#

在javascript中的pan验证正则表达式是

    • 令正则表达式=/^([A-Z]){3}(C| P级|高|F级|A类|T型|B| L型|J型|G){1}([A-Z]){1}([0 - 9]){4}([A-Z]){1}?$/;**
    • 返回正则表达式测试(pan);**

正则表达式的解释
([A-Z]){3}:-前三个字符只能在A-Z之间,且大写
(丙)|P级|高|F级|A类|T型|B| L型|J型|G){1}:-第四个字符具有特殊含义
即C代表公司,P代表个人等。
([A-Z]){1}:-第五个字符只能位于A-Z之间,且大写
([0 - 9]){4}:接下来的四个字符是数字,所以它检查这四个字符应该是数字
([A-Z]){1}:-最后一个字符也表示大写字母中的唯一字符
最后,我使用javascript函数返回true和false输出
返回正则表达式测试(pan);(如果平移符合正则表达式,则返回true,否则返回false)

2ledvvac

2ledvvac3#

    • 一月一日**

我可以给你这段代码:

<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=""
/>

这段代码来自塔塔的网站,他们知道自己在做什么,而且经常更新验证。

g9icjywg

g9icjywg4#

matches()使用的正则表达式是基于用户的额外输入而形成的,look-behinds检查前面的第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]"));

Click here

相关问题