0

我在使用正则表达式验证用户输入时遇到问题。例如

if(preg_match("/(male|female)/",$gender)==true)
{
    echo "true";
}

当用户在“男性”或“女性”之后键入任何内容时,我的代码仍然输出“真”。如何解决这个问题呢?

4

2 回答 2

2

首先,您不需要正则表达式。您可以使用一个简单的数组作为白名单:

if (in_array($gender, ['male', 'female'])) echo "true";

至于正则表达式部分,问题在于您没有使用任何锚点(male|female),因此如果出现在输入中的任何位置,您的正则表达式匹配。^您可以通过包含和$锚点来强制正则表达式匹配整个输入:

if(preg_match("/^(male|female)$/",$gender)) echo "true";
于 2013-09-02T14:20:02.300 回答
0

这样做不是更好吗

if ( $gender == 'male' || $gender == 'female' ) {}

或者

if ( in_array($gender, array('male', 'female')) ) {}

?

于 2013-09-02T14:20:11.047 回答