正则表达式上的选定值

时间:2013-09-02 14:17:11

标签: php regex

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

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

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

2 个答案:

答案 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')) ) {}