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