1

我需要一个正则表达式来识别只有两个选项,它们是“F”和“M”字符。我在尝试:

preg_replace('/([^FM]){1}/', '', $_GET['option'])

但是如果我输入'MF',它会返回'MF',但我期待'M'。

有谁能够帮助我?

4

2 回答 2

1
$output = preg_replace('/^[^FM]*([FM])?.*/s', '$1', $_GET['option']);

从字符串的开头开始。消耗所有非FM字符。然后匹配一个FM字符(如果有的话)。匹配输入的其余部分。替换为匹配的字符。M请注意,如果没有或根本没有,您最终会得到一个空字符串F

但是,您可能应该重新考虑如何获取该数据,因为它似乎是一个布尔值(但您需要处理可能包含所需字符的任意字符串)。

如果您自己(从其他网站)生成值,您应该能够知道未被篡改的值是"M""F"。那么为什么不直接使用:

if ($_GET['option'] == "M")
    // male...
elseif ($_GET['option'] == "F")
    // female...
else
    // someone tried to mess with you ...
于 2012-12-07T19:01:10.150 回答
0

总是可以试试这个。这是一个单行,将抓住字符串的第一个字符。如果是“m”或“M”,它将返回“M”。女性也是如此。如果没有匹配,那么它将返回 ''。

$gender = strtolower(substr($_GET['option'], 0, 1)) == 'f' ? 'F' : (strtolower(substr($_GET['option'], 0, 1)) == 'm' ? 'M' : '');

于 2012-12-07T19:31:48.353 回答