php M或F(男性或女性)

php M或F(男性或女性),php,Php,我知道有更优雅的方法来建立一个html表单来接受男性或女性的输入;然而,我正在学习,我只是想知道这是否也是可能的: //Incorporate two checks if (empty($_POST['sex'])==FALSE && sanityCheck($_POST['sex'], 'string', 1)==TRUE) { // if the checks are ok for sex we assign sex to a variable

我知道有更优雅的方法来建立一个html表单来接受男性或女性的输入;然而,我正在学习,我只是想知道这是否也是可能的:

//Incorporate two checks
 if (empty($_POST['sex'])==FALSE && sanityCheck($_POST['sex'], 'string', 1)==TRUE)
      {
      // if the checks are ok for  sex we assign sex  to a variable
      $sex = $_POST['sex'];
       }
      else
      {
      // if all is not well we echo an error message
      echo 'Please enter a valid Gender';
      // and exit the script
      exit();
      }
如果是这样,我将如何与正则表达式进行检查? 用户是否键入M或F

我在想:

function checksex($sexcheck)
{
//Some regex here to check the sex?
  return preg_match('               ', $sexcheck);
}
然后调用checksex作为添加到if条件的第三个检查,如下所示:

if (empty($_POST['sex'])==FALSE && sanityCheck($_POST['sex'], 'string', 1) != FALSE && checksex($_POST['sex'], 1) ==TRUE)
{
...
}

要检查用户是否键入了M或F,只需进行字符串比较。不需要正则表达式

if ( isset($_POST['sex']) ){
    $sex = $_POST['sex'];
    if ( $sex == 'M' ){
        echo 'Male';
    }else if ( $sex == 'F' ){
        echo 'Female';
    }else{
        echo 'Please enter a valid Gender';
    }
}else{
    echo 'Please enter a valid Gender';
}
但是,与其让用户键入M或F,为什么不使用a或单选按钮

选择框可能看起来像这样

<select name='sex'>
    <option selected="yes" value="NA">Not Saying</option>
    <option value="F">Female</option>
    <option value="M">Male</option>
 </select>

不说
女性
男性
或单选按钮:

<input type="radio" name="sex" value="M" /> Male <br />
<input type="radio" name="sex" value="F" /> Female
男性
女性
当然,您仍然需要检查
$\u POST['sex']
是否仍然是M或F,并处理不是其中任何一个的情况,因为用户可能会决定发布一个无效值。

试试这个不带引号的“(M | F){1}”怎么样

// check if the sex variable is 'f' or 'm'
        $sex = ($_POST['sex'] == 'f' || $_POST['sex'] == 'm') ? $_POST['sex'] : false;
// thanks to peter
    // if $sex is false then echo..
        if (!$sex)
            echo ('Please enter a valid Gender');
解释

它是一个称为三元运算符的条件运算符。就像

(如果条款)?(然后):(否则)

(实验1)?(实验2):(实验3)

如果expr 1为真,则计算expr 2 如果expr 1为false,则计算expr 3


Ref:

为什么要使用正则表达式检查两个可能字符串中的一个???“如果”就可以了。如果您希望减少健全性检查、$u后期篡改和错误消息,正则表达式将帮不上忙。它们只是一个在字符串中查找模式的工具。是的,你是对的,我可能会原封不动地离开,因为我只是在玩正则表达式。
empty(…)==TRUE
empty(…)
完全相同,因为
empty
只能返回
TRUE
false
。好的,所以你说空可以是真的也可以是假的,所以不需要==true,对吗?你不应该检查
==false
或`==true
。PHP中的
if`知道如何检查真实性。问题是有许多真实的值,只有少数错误的值。例如:“hello world”在PHP中也是一个真值,但0不是。谢谢,但Pekka Gaiser刚刚指出,不需要正则表达式来检查两个可能字符串中的一个。不过,很高兴知道这一点,谢谢。这比使用巨大的“elseif”子句要好得多!!它的功能是什么?在变量$sex=$POST['sex']之前,变量后面是什么?你的技术很先进,但代码很简单。你用错了三元运算符。不要在第二个或第三个表达式中使用赋值。因为这会产生很多微妙的错误。使用类似于
$sex=..的东西$_POST['sex']:false
。实际上,我总是这样使用三元运算符。。谢谢你告诉我。。我想我必须改变我的很多剧本了,哈哈
$s = $_POST['sex'];

if(isset($s) && $s == 'M') {
    $sex = "Male";
} elseif(isset($s) && $s == 'F') {
    $sex = "Female";
} else {
    $sex = "Please enter a valid gender";
}