ELO信用卡正则表达

时间:2017-03-13 06:44:39

标签: regex

我需要一个elo信用卡的正则表达式,它应该只允许前6位数字。总长度为16,全部16应仅为数字。字母是不允许的。

允许的前缀:

  

401178,401179,431274,438935,451416,457393,457631,457632,   504175,627780,636297,636368,655000,655001,651652,651653,   651654,650485,650486,650487,650488,506699至506778和509000   到509999

3 个答案:

答案 0 :(得分:2)

使用替换,通过一些额外的工作来覆盖您拥有的两个数值范围。

^(?:401178|401179|431274|438935|451416|457393|457631|457632|504175|627780|636297|636368|
    655000|655001|651652|651653|651654|650485|650486|650487|650488|506699|5067[0-6][0-9]|
    50677[0-8]|509\d{3})\d{10}$

以下是我们处理这两个范围的方法:

506699 to 506778

506699|            matches 506699
5067[0-6][0-9]|    matches 506700 through and including 506769
50677[0-8]         matches 506770 through and including 506778

509000 to 509999

509\d{3}           matches 509000 through and including 509999
                   i.e. 509 followed by any 3 digits

在这里演示:

Regex101

答案 1 :(得分:1)

你可以试试这个:

^(?:40117[8-9]|431274|438935|451416|457393|45763[1-2]|504175
|627780|636297|636368|65500[0-1]|65165[2-4]|65048[5-8]|506699
|5067[0-6]\d|50677[0-8]|509\d{3})\d{10}$
  

Demo

简单说明

  
      
  1. ^行的开头
  2.   
  3. (小组开始
  4.   
  5. ?:不会将其存储在论坛
  6. 中   
  7. 40117[8-9]表示40117,后跟8到9之间的任何内容(相同   适用于类似物)
  8.   
  9. |表示OR
  10.   
  11. 5067[0-6]\d表示5067 + 0到6之间的数字+一个数字   (任何)
  12.   
  13. \d{10}表示将查看接下来的10个字符是否为数字(在之前的有效6位数之后)
  14.   
  15. $行尾
  16.   

答案 2 :(得分:1)

基本上,您需要与某些范围运算符进行交替以缩短正则表达式。

最棘手的部分是定义范围506699 to 506778,可以表示为506699|5067[06]\d|50677[0-8]

(?x)^(?:
    40117[89]|431274|438935|451416|457393|457631|457632|504175
    |627780|636297|636368|65500[01]|65165[234]|65048[5-8]
    |506699|5067[06]\d|50677[0-8]
    |509\d{3}
)\d{10}$

演示:https://regex101.com/r/BbnHeQ/2

注意:(?x)用于允许正则表达式中的空白字符,这简化了日志表达式的读取。