告诉我字符串中的数字字符是错误的

时间:2015-07-29 17:57:22

标签: php regex

我想在PHP中创建一个以字符串作为参数的函数,然后告诉我例如字符串中的字符编号5是无效的,所以我知道在哪里查找错误,而不是只告诉我string包含无效字符。

假设我有字符串“abc1x3”。

Character 1 must be a-z to be valid.
Character 2 must be a-z to be valid.
Character 3 must be a-z to be valid.
Character 4 must be 0-9 to be valid.
Character 5 must be 0-9 to be valid.
Character 6 must be 0-9 to be valid.

因此字符5无效。它应该是一个数字,但它是x。

2 个答案:

答案 0 :(得分:2)

一个非正则表达式解决方案(针对此特定情况,在任何其他情况下,您应该设置新规则!):

$str = 'abc1x3';
$arr = str_split($str);

for ($i = 0; $i < count($arr); $i++) {

    //set rules, check char by char!

    if ($i < 3) {
        if (!ctype_alpha($arr[$i])) {
            echo 'Character'.($i + 1).
            'must be letter';
        }
    } else if (!ctype_digit($arr[$i])) {
        echo 'Character number '.($i + 1).
        ' must be number';
    }
}

编辑:如果你想要小写字符或简单的正则表达式,请使用ctype_lower()函数...

答案 1 :(得分:1)

使用修改后的级联正则表达式,您可以将匹配长度与中位数进行比较 字符串长度,以获取违规字符的位置。

^(?:[a-z]{3}(?:\d{1,3})?|[a-z]{1,2})?

 ^     
 (?:
      [a-z]{3} 
      (?:
           \d{1,3} 
      )?
   |  
      [a-z]{1,2} 
 )?

输出:

 **  Grp 0 -  ( pos 0 , len 4 ) 
abc1  

if(match.length!= str.length){print“position at position match.length +1”}