我需要一个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
答案 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
在这里演示:
答案 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}$
简单说明
^
行的开头(
小组开始- 中
?:
不会将其存储在论坛40117[8-9]
表示40117,后跟8到9之间的任何内容(相同 适用于类似物)|
表示OR5067[0-6]\d
表示5067 + 0到6之间的数字+一个数字 (任何)\d{10}
表示将查看接下来的10个字符是否为数字(在之前的有效6位数之后)- 醇>
$
行尾
答案 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)
用于允许正则表达式中的空白字符,这简化了日志表达式的读取。