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

PHP正则表达式只允许两个字符,php,regex,preg-replace,Php,Regex,Preg Replace,我需要一个正则表达式来识别两个选项,它们是'F'和'M'字符。我正在努力: preg_replace('/([^FM]){1}/', '', $_GET['option']) 但如果我输入'MF',它会返回'MF',但我期待的是'M' 有人能帮我吗 $output = preg_replace('/^[^FM]*([FM])?.*/s', '$1', $_GET['option']); 从字符串的开头开始。使用所有非FM字符。然后匹配一个F或M字符(如果有)。匹配输入的其余部分。替换为匹配的

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

preg_replace('/([^FM]){1}/', '', $_GET['option'])
但如果我输入'MF',它会返回'MF',但我期待的是'M'

有人能帮我吗

$output = preg_replace('/^[^FM]*([FM])?.*/s', '$1', $_GET['option']);
从字符串的开头开始。使用所有非
FM
字符。然后匹配一个
F
M
字符(如果有)。匹配输入的其余部分。替换为匹配的字符。请注意,如果根本不存在
M
F
,您将得到一个空字符串

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

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

if ($_GET['option'] == "M")
    // male...
elseif ($_GET['option'] == "F")
    // female...
else
    // someone tried to mess with you ...
从字符串的开头开始。使用所有非
FM
字符。然后匹配一个
F
M
字符(如果有)。匹配输入的其余部分。替换为匹配的字符。请注意,如果根本不存在
M
F
,您将得到一个空字符串

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

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

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

我可以试试这个。它是一行,将获取字符串的第一个字符。如果'm'或'm',它将返回'm'。女性也是如此。如果没有匹配项,则它将返回“”


$gender=strtolower(substr($\u GET['option'],0,1))==f'?'F':(strtolower(substr($\u GET['option'],0,1))=='m'?'m':''

始终可以尝试此操作。它是一行,将获取字符串的第一个字符。如果'm'或'm',它将返回'm'。女性也是如此。如果没有匹配项,则它将返回“”


$gender=strtolower(substr($\u GET['option'],0,1))==f'?'F':(strtolower(substr($\u GET['option'],0,1))=='m'?'m':''

您为什么期望
M
?为什么不
F
?是否要用m/F和$\u GET[]消除所有MF?我想您要检查表单上提交的值是男性还是女性?如果这是正确的,您可以在不使用正则表达式的情况下更好地检查,f.e If in_数组('m',f);此时,您可能只需要使用
option='M'| | option='F'
。。。这不是正则表达式的一个很好的用法。为什么是正则表达式?你为什么不用一个简单的
如果($你得到['option']==“F”或($你得到['option']==“F”)
你为什么期望
M
?为什么不
F
?你想用M/F和$你得到[]来消除所有的MF我认为您想要检查表单上提交的值是男性还是女性?如果这是正确的,您可以在不使用正则表达式的情况下进行检查,f.e if in_数组('m',f);在这一点上,您可能应该只使用
option=='M'| | option=='F'
…这不是正则表达式的一个很好的用法。为什么使用正则表达式?为什么不使用简单的
if($\u GET['option']='F'或($\u GET['option']='F')进行验证
我试图阻止PHP注入,你知道你的第二个建议是否安全吗?谢谢!@MarcioSimao,只要你不使用
$\u GET['option'的值
男性
女性
块之外的任何地方,您都应该是安全的。我正在试图阻止PHP注入,您知道您的第二个建议是否安全吗?谢谢!@MarcioSimao,只要您不使用
$\u GET['option'的值
男性
女性
街区之外的任何地方,您都应该是安全的。