我有一个要求用户提供地址的表单,在此表单上有一个邮政编码字段。该字段根据加拿大邮政编码RegEX远程检查有效性。
如果字段中的数据未通过测试,则会显示一条错误消息,显示字段中输入的内容+“不是有效的邮政编码”。
即。如果我输入“44444”并尝试验证,则错误显示“44444不是有效的邮政编码”。
PHP脚本已经过测试和工作,通过jQuery验证脚本进行远程检查工作,它正确地返回true或false,但是如果你使用邮政代码来测试它,并且改变它足够多次,那么错误消息停止更新所以你得到的是,而不是“44444不是一个有效的邮政编码”,它会说“44不是一个有效的邮政编码”,它总是似乎是你在同一个尝试的旧组合“页面加载”。
当发生这种情况时,脚本仍然可以正常工作,如果您输入正确的邮政编码将会通过并且错误消息消失。
键入不正确的文件将失败并再次显示错误消息,但该错误消息未显示您输入的新数据,它会显示您之前输入的内容,即如果您键入“L3B 555”,而不是显示“L3B 555不是有效的邮政编码”,它会说“44不是有效的邮政编码”,并且在您刷新页面并重新开始之前一直停留在先前的输入上。
同样,即使这一切开始发生,脚本仍会传递有效的邮政编码并允许您通过表单。
这是我第一次验证这个复杂的事情,所以请原谅我,如果它是显而易见的。
这是javascript:
var validator = $("#newReviewForm").validate({
onkeyup: false,
rules: {
//Here we name each field from the page that we are validating
streetNo: {
required: true,
},
streetName : {
required: true,
},
town: {
required: true,
},
postal: {
required: true,
remote: {
url: "_libraries/PHP/newReview_postalRegex.php",
type: "post",
},
},
province: {
required: true,
},
},
messages: {
//Here we place the messages we want displayed when a form is invalid
streetNo: {
required: "We need the unit number.",
},
streetName : {
required: "We need the street's name."
},
town: {
required: "We need the town's name."
},
postal: {
required: "Please enter a postal code.",
remote: $.validator.format("{0} is not a valid postal code."),
},
province: {
required: "Please enter a valid Province",
required: true,
},
},
errorLabelContainer: "#errorMessages",
wrapper: "li",
submitHandler: function() { alert("Submitted!")},
});
远程PHP代码:
<?php
$request = trim(strtoupper($_REQUEST['postal']));
$postal = $request;
$valid = 'true';
$regex = '^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$^';
if (preg_match($regex, $postal)) {
echo $valid;
} else {
$valid = 'false';
echo $valid;
}
?>
形式:
<form id="newReviewForm" method="post" action="#">
<table>
<tr>
<td class="title">Street Number</td>
<td>
<input type="text" name="streetNo" id="streetNo" required="required"/></td><td class="status"></td>
<td class="title" style="float: right">Apt #</td>
<td><input type="text" name="aptNo" id="aptNo" /></td><td class="status"></td>
</tr>
<tr>
<td class="title">Street Name</td>
<td colspan="4"><input type="text" name="streetName" id="streetName" /></td><td class="status"></td>
</tr>
<tr>
<td class="title">Town</td>
<td colspan="4"><input type="text" name="town" id="town" /></td><td class="status"></td>
</tr>
<tr>
<td class="title">Postal Code</td>
<td colspan="4"><input type="text" name="postal" id="postal" /></td><td class="status"></td>
</tr>
<tr>
<td class="title">Province</td>
<td colspan="4"><input type="text" name="province" id="province" /></td><td class="status"></td>
</tr>
</table>
<input type="submit" value="submit" />
</form>
<div id="errorMessages"></div>
我不认为这是一个PHP问题,但我现在不知所措,无法弄清楚为什么会这样。