PHP正则表达式只允许两个字符

时间:2012-12-07 18:55:18

标签: php regex preg-replace

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

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

但如果我输入'MF'则返回'MF',但我期待'M'。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

if ($_GET['option'] == "M")
    // male...
elseif ($_GET['option'] == "F")
    // female...
else
    // someone tried to mess with you ...

答案 1 :(得分:0)

总是可以试试这个。这是一个班轮,将抓住字符串的第一个字符。如果是'm'或'M',它将返回'M'。女性也一样。如果没有匹配则会返回''。

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