2

我需要一个正则表达式来验证以下代码,在我声明所需结果的代码后面。

<?php
    $codes[] = 'PI-1234-265K'; // true
    $codes[] = 'PIS2-12FG-265K'; // false
    $codes[] = 'PI-1234FG-265K'; // false
    $codes[] = 'PI-1234-2'; // false
    $codes[] = 'PI-1234-265K12313'; // true
    foreach($codes as $code){
        var_dump(preg_match('/[a-zA-Z0-9]{2}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{2,}/', $code));
        echo '<br/>';
    }
?>

目前第一部分没有得到正确检查,它返回 11001 但所需的结果是 10001。

4

1 回答 1

3

你需要锚定你的正则表达式

var_dump(preg_match('/^[a-zA-Z0-9]{2}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{2,}$/', $code));

^匹配字符串的开头

$匹配字符串的结尾

如果您不这样做,您将获得部分匹配。意味着在您的第二种情况下 "PIS2-12FG-265K" 它匹配S2-12FG-265K,因此您的匹配不会从头开始。

于 2013-02-27T13:51:03.417 回答