正则表达式 preg_match 无法匹配大写字母和数字 albumID

regex preg_match not working to match uppercase alpha and numeric albumID

我需要验证 albumID 输入是 2 个大写字母和 3 个数字。我用 http://regexr.com/ and also http://www.tutorialspoint.com/php/php_preg_match.htm 来确认这个

preg_match('/([A-Z]{2}[0-9]{3})/', $albumid)

应该可以,但不是:

        <?php
         // define variables and set to empty values
          $albumidErr =  $albumid = "";
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
           if (preg_match('/([A-Z]{2}[0-9]{3})/', $albumid))
            {
            $albumid = test_input($_POST["albumid"]);
            $albumidErr = print $albumid;
            }
           else { 
            $albumidErr = " Album ID must be 2 Uppercase letters and 3 numbers (i.e. BI010)";
            }

         }
        ?>
      <form method="post" action="
       <?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        <p>
            <label for="albumid">*Album ID:</label>
            <?php echo $albumidErr;?><br>
            <input type="text" name="albumid" id="albumid"/>
        </p>

        <p>
            <input type="submit" name="submit" id="submit" value="submit"/>
        </p>
    </form>

在您的代码中:

$albumidErr =  $albumid = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (preg_match('/([A-Z]{2}[0-9]{3})/', $albumid))

你让 $albumid 为空然后你试图用这个空字符串匹配正则表达式,当然,它不匹配。

我猜你想要:

$albumidErr =  $albumid = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (preg_match('/([A-Z]{2}[0-9]{3})/', $_POST["albumid"]))
    //                                     ^^^^^^^^^^^^^^^^^

您可以添加锚点:

$albumidErr =  $albumid = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (preg_match('/^([A-Z]{2}[0-9]{3})$/', $_POST["albumid"]))