为什么我的PHP没有验证?

为什么我的PHP没有验证?,php,html,validation,preg-match,Php,Html,Validation,Preg Match,我试图这样做,如果一个人输入了错误的邮政编码格式,或者输入为空,它将给出一个错误。我正试图弄明白它为什么不起作用。请帮忙 <td>Postal Code</td> <td> <input type="text" id="postal_code" name="postal_code" value="<?php if($_POST['postal_code'] == null){ echo '';}else{echo $_POST['post

我试图这样做,如果一个人输入了错误的邮政编码格式,或者输入为空,它将给出一个错误。我正试图弄明白它为什么不起作用。请帮忙

<td>Postal Code</td>
<td>
    <input type="text" id="postal_code" name="postal_code" value="<?php if($_POST['postal_code'] == null){  echo '';}else{echo $_POST['postal_code'];}?>"/>
</td>
<td class="error" colspan="2">
    <?php 
        if(isset($_POST['send_bulkform'])  && $_POST['postalcode'] != preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code']) || isset($_POST['send_studentform']) && $_POST['postalcode'] != preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code']))
        { 
            echo "Required, ex. A1A 1A1."; 
        }
        elseif(isset($_POST['send_bulkform'])  && $_POST['postalcode'] == null || isset($_POST['send_studentform']) && $_POST['postalcode'] == null)
        {
            echo "Required, ex. A1A 1A1."; 
        }
    ?>
</td>
</tr>
邮政编码
这一行的问题在于:

if(isset($_POST['send_bulkform'])  && $_POST['postalcode'] != preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code']) || isset($_POST['send_studentform']) && $_POST['postalcode'] != preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code']))
1-preg_match返回1表示匹配,返回0表示不匹配。所以你的测试:

$_POST['postalcode'] != preg_match(...)
毫无意义,而且大多数情况下都是“真实的”。 只需使用:

 if(preg_match(...))
2-preg_匹配中的Regexp格式不正确。替换:

preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code'])
与:


这一行的问题在于:

if(isset($_POST['send_bulkform'])  && $_POST['postalcode'] != preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code']) || isset($_POST['send_studentform']) && $_POST['postalcode'] != preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code']))
1-preg_match返回1表示匹配,返回0表示不匹配。所以你的测试:

$_POST['postalcode'] != preg_match(...)
毫无意义,而且大多数情况下都是“真实的”。 只需使用:

 if(preg_match(...))
2-preg_匹配中的Regexp格式不正确。替换:

preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code'])
与:


您的正则表达式不正确,PHP用法也不正确。在PHP中,正则表达式需要

PCRE正则表达式中的反斜杠转义下一个字符。我将使用:

[A-Z]\d[A-Z] \d[A-Z]\d
在PHP中(添加锚点以便整个字符串必须匹配):

如果大小写是可选的,请在分隔符后添加
i
修饰符:

preg_match('/^[A-Z]\d[A-Z] \d[A-Z]\d$/i', $string);
也可以添加小写字符范围:

preg_match('/^[A-Za-z]\d[A-Za-z] \d[A-Za-z]\d$/', $string);
正则表达式演示:
PHP演示:(1为真,用于匹配)


如果第一组和第二组之间的空格可能不同,请使用
\h
*
量词或
+
量词。
*
使其成为非必需的(零次或多次出现)。

您的正则表达式不正确,并且您的PHP用法不正确。在PHP中,正则表达式需要

PCRE正则表达式中的反斜杠转义下一个字符。我将使用:

[A-Z]\d[A-Z] \d[A-Z]\d
在PHP中(添加锚点以便整个字符串必须匹配):

如果大小写是可选的,请在分隔符后添加
i
修饰符:

preg_match('/^[A-Z]\d[A-Z] \d[A-Z]\d$/i', $string);
也可以添加小写字符范围:

preg_match('/^[A-Za-z]\d[A-Za-z] \d[A-Za-z]\d$/', $string);
正则表达式演示:
PHP演示:(1为真,用于匹配)


如果第一组和第二组之间的空格可能不同,请使用
\h
*
量词或
+
量词。
*
使其不需要(零次或多次出现)。

首先,
preg_match()
及其同事需要。其次,没有必要在角色组中避开破折号。写
[A-Z]
而不是
[A-Z]
。顺便说一句:验证邮政编码可能根本不是一个好主意,因为有。一些国家甚至使用了几种格式。regex应该在做什么?它将允许
A
-
Z
A
-
Z
。然后是
0
-
9
。等等。这是专门针对加拿大的。preg_match({[A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9]}),$_POST['postal_code'])这样的东西会更好吗?它的格式为采用加拿大邮政编码.ex。A1A 1A1,结果应该是这样的。首先,
preg_match()
及其同事要求。其次,没有必要在角色组中避开破折号。写
[A-Z]
而不是
[A-Z]
。顺便说一句:验证邮政编码可能根本不是一个好主意,因为有。一些国家甚至使用了几种格式。regex应该在做什么?它将允许
A
-
Z
A
-
Z
。然后是
0
-
9
。等等。这是专门针对加拿大的。preg_match({[A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9]}),$_POST['postal_code'])这样的东西会更好吗?它的格式为采用加拿大邮政编码.ex。A1A 1A1,结果应该是这样的。你错过了一个
/
preg\u match
模式的结尾。谢谢丹尼尔,你是对的,刚刚编辑了我的帖子。你错过了
/
preg\u match
模式的结尾。谢谢丹尼尔,你是对的,刚刚编辑了我的帖子。这非常有用。我以前没有在PHP中使用过Regex,只是在关注我在W3学校和PHP网站上读到的内容。不过,这更有意义。谢谢这很有帮助。我以前没有在PHP中使用过Regex,只是在关注我在W3学校和PHP网站上读到的内容。不过,这更有意义。谢谢