正则表达式:验证大于0的数字,带或不带前导零

时间:2013-08-14 08:46:49

标签: regex digit

我需要一个能匹配T001,T1,T012,T150 ---- T999等字符串的正则表达式。

我这样做:[tT][0-9]?[0-9]?[0-9],但显然它也会匹配我不想要的T0,T00和T000。

如果前一个或两个为零,如何强制最后一个字符为1?

2 个答案:

答案 0 :(得分:3)

我不会使用正则表达式。

<?php
function tValue($str) {
    if (intval(substr($str, 1)) !== 0) {
        // T value is greater than 0
        return $str;
    } else {
        // convert T<any number of 0> to T<any number-1 of 0>1
        return $str[ (strlen($str) - 1) ] = '1';
    }
 }

 // output: T150
 echo tValue('T150'), PHP_EOL;

 // output: T00001
 echo tValue('T00000'), PHP_EOL;

 // output: T1
 echo tValue('T0'), PHP_EOL;

 // output: T555
 echo tValue('T555'), PHP_EOL;

键盘:http://codepad.org/hqZpo8K9

答案 1 :(得分:3)

使用否定前瞻非常简单:^[tT](?!0{1,3}$)[0-9]{1,3}$

<强>解释

^               # match begin of string
[tT]            # match t or T
(?!             # negative lookahead, check if there is no ...
    0{1,3}      # match 0, 00 or 000
    $           # match end of string
)               # end of lookahead
[0-9]{1,3}      # match a digit one or three times
$               # match end of string

Online demo