我需要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
使用交替,并进行一些额外的工作来覆盖您拥有的两个数值范围。
^(?: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]|509d{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
509d{3} matches 509000 through and including 509999
i.e. 509 followed by any 3 digits
演示:
REGEX101
您可以尝试以下方法:
^(?: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]|509d{3})d{10}$
演示
简单说明
^
线的开始(
组开始?:
不会将其存储在组中40117[8-9]
表示40117,然后是8到9之间的任何东西(相同 适用类似)|
表示或5067[0-6]d
表示5067 一个数字在0到6 一个数字之间 (任何)d{10}
意味着它将查看接下来的10个字符是否是数字(以前有效的6位数字)$
线的结尾
基本上,您需要与某些范围运算符交替来缩短正则义务。
最棘手的部分是定义范围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]
|509d{3}
)d{10}$
演示:https://regex101.com/r/bbnheq/2
nb:(?x)
用于允许在正时线中使用空格字符,这简化了对日志表达式的阅读。