我想在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。
答案 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”}