[英]regex validation not parsing string in if PHP
这是交易...
我想解析一个加拿大邮政编码(CapsLetterNumberCapsLetterNumberCapsLetterNumber:例如A1B2C3或G2V3V4),如果有的话。
我有以下代码(PHP):
//Create new SESSION variable to store a warning
$_SESSION['msg'] = "";
//IF empty do nothing, IF NOT empty parse, IF NOT match regex put message in msg
if(!preg_match('^([A-Z][0-9][A-Z][0-9][A-Z][0-9])?$^', $_POST['txtPostalCode']) && $_POST['txtPostalCode'] != "")
{
$_SESSION['msg'] .= "Warning invalide Postal Code";
}
然后代码继续显示$_SESSION['msg']
。
问题是,无论我在$ _POST ['txtPostalCode']中输入什么,它都不会被REGEX解析。
您将整个捕获组设为可选:
^([A-Z][0-9][A-Z][0-9][A-Z][0-9])?$^
^
使用正则表达式元数据字符作为分隔符也不是一个好主意。 尝试使用此正则表达式,该正则表达式将一个大写字母和一个数字匹配三遍:
/^((?:[A-Z][0-9]){3})$/
您不需要将捕获组设为可选,因为您可以处理if语句中&& $_POST['txtPostalCode'] != ""
用户未提交代码时的逻辑。
最后,由于您甚至没有使用此正则表达式中的匹配项,因此不需要捕获组:
/^(?:[A-Z][0-9]){3}$/
您的正则表达式将匹配无效的邮政编码。
快速谷歌搜索“加拿大邮政编码的正则表达式” 买涨
^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$
您可能还想先设置$_POST['txtPostalCode'] != ""
条件,因为如果值开头为空,则执行正则表达式毫无意义。
编辑:正如评论所指出的,量词是多余的:
^[ABCEGHJKLMNPRSTVXY]\d[A-Z] *\d[A-Z]\d$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.