我在使用正则表达式验证用户输入时遇到问题。例如
if(preg_match("/(male|female)/",$gender)==true)
{
echo "true";
}
当用户在“男性”或“女性”之后键入任何内容时,我的代码仍然输出“真”。如何解决这个问题呢?
首先,您不需要正则表达式。您可以使用一个简单的数组作为白名单:
if (in_array($gender, ['male', 'female'])) echo "true";
至于正则表达式部分,问题在于您没有使用任何锚点(male|female)
,因此如果出现在输入中的任何位置,您的正则表达式匹配。^
您可以通过包含和$
锚点来强制正则表达式匹配整个输入:
if(preg_match("/^(male|female)$/",$gender)) echo "true";
这样做不是更好吗
if ( $gender == 'male' || $gender == 'female' ) {}
或者
if ( in_array($gender, array('male', 'female')) ) {}
?