我试图这样做,如果一个人输入错误的邮政编码格式或留下输入null,它将给出一个错误。我试图找出它为什么不起作用。请帮忙!
<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>
答案 0 :(得分:3)
问题在于这一行:
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(...)
毫无意义,并且大部分时间都是&#34; true&#34;。 只需使用:
if(preg_match(...))
2 - preg_match中的Regexp格式不正确。替换:
preg_match("[A\-Za\-z][0\-9][A\-Za\-z] [0\-9][A\-Za\-z][0\-9]",$_POST['postal_code'])
使用:
preg_match("/[A-Za-z][0-9][A-Za-z] [0-9][A-Za-z][0-9]/",$_POST['postal_code'])
答案 1 :(得分:1)
您的正则表达式不正确,并且您的PHP使用不正确。在PHP中,正则表达式需要delimiters。
PCRE正则表达式中的反斜杠会转义下一个字符。我会用:
[A-Z]\d[A-Z] \d[A-Z]\d
并在PHP中(添加锚点以便整个字符串必须匹配):
preg_match('/^[A-Z]\d[A-Z] \d[A-Z]\d$/', $string);
如果案例是可选的,请在分隔符后添加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);
正则表达式演示:https://regex101.com/r/cG9sG9/1
PHP演示:https://eval.in/594444(1是真的,匹配)
如果第一个分组和第二个分组之间的空白可以使用\h
以及*
量词或+
量词,则可能会有所不同。 *
使其不需要(零次或多次出现)。