du27271 2010-07-21 04:39
浏览 57
已采纳

PHP正则表达式问题(用户名,生日,电子邮件地址)

The below regex's don't seem to be working. Is it because of !preg_match?
Username

if (!preg_match("/^[A-Za-z](?=[A-Za-z0-9_.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/",$_POST['username'])) {
    $hasErr = true;
    $return['username'] = 'Please enter a valid username. Use 4 to 32 characters '
                        . 'and start with a letter. You may use letters, numbers, '
                        . 'underscores, and one dot (.).';
}

Birthdate

if (!preg_match("'\b(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}\b'", $_POST['birthdate'])) {
    $hasErr = true;
    $return['birthdate'] = 'Please enter your birthdate in a valid format. mm/dd/yyy';
}

Email Address

if (!preg_match("'\b[A-Z0-9._%-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b'",$_POST['email'])) {
    $hasErr = true;
    $return['email'] = 'Please enter a valid email address.';
}
  • 写回答

1条回答 默认 最新

  • dsyct08008 2010-07-21 05:19
    关注

    Here's what I would do

    <?php
    
    // remove whitespaces
    array_walk($_POST, 'trim');
    
    function validate() {
        $return = array();
        if (!preg_match('/^[A-Za-z](?=[A-Za-z0-9_.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/',$_POST['username'])) {
            $return['username'] = 'Please enter a valid username. Use 4 to 32 characters '
                                . 'and start with a letter. You may use letters, numbers, '
                                . 'underscores, and one dot (.).';
        }
    
        if (!preg_match('/^(0?[1-9]|1[012])[- .\/](0?[1-9]|[12][0-9]|3[01])[- .\/](19|20)?[0-9]{2}$/', $_POST['birthdate'])) {
            $return['birthdate'] = 'Please enter your birthdate in a valid format. mm/dd/yyy';
        }
    
        // email regexes are pretty problematic
        if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $return['email'] = 'Please enter a valid email address.';
        }
    
        return (empty($return)) ? true : $return;
    }
    
    echo '<pre>';
    var_dump(validate());
    echo '</pre>';
    
    ?>
    

    Note: I didn't check your username regex.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作