RegEx匹配7到11位数,带或不带前缀

时间:2014-03-20 13:17:53

标签: regex validation

嗨我需要一个正则表达式,它匹配最少7位数到最多11位数字,可选前缀为ptno或PTNO

我目前有......

^[pP]?[tT]?[nN]?[oO]?[0-9]+$

但这匹配任意数量的数字...如何限制为最小7位或最多11位数。

以下显示有效和无效组合

PTNO01234567891     (valid max no of digits) 
12345678901         (valid max no of digits) 
PTNO9876543         (valid min no of digits) 
1234567             (valid min no of digits) 
PTNO000012345678    (invalid too many digits) 
012345678912        (invalid too many digits) 
PTNO098765          (invalid too few digits) 
123456          (invalid too few digits)

实际上我很乐意有一个正则表达式,它会取一个值,忽略可选前缀和任何填充0,并从左边确保我有一个7位的最小值。

3 个答案:

答案 0 :(得分:1)

从正则表达式更改+符号int {7,11}+表示一个或多个,这就是为什么它匹配任何数量超过1的数字:

^[pP]?[tT]?[nN]?[oO]?[0-9]{7,11}$

答案 1 :(得分:1)

试试这个正则表达式:

^(ptno|PTNO)?\d{7,11}$

Regular expression visualization

Debuggex Demo

我不确定“ptno或PTNO前缀”的含义。在您的示例中,您允许在此处跳过单个字母( PNO 将匹配)。我完成了这个前缀的匹配。

答案 2 :(得分:0)

如果使用不区分大小写的标志,请执行以下操作:

^(?:ptno)?0*\d{7,}$

如果它是ptno PTNO:

^(?:ptno|PTNO)?0*\d{7,}$