代码之家  ›  专栏  ›  技术社区  ›  st4ck0v3rfl0w

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

  •  0
  • st4ck0v3rfl0w  · 技术社区  · 14 年前

    下面的正则表达式似乎不起作用。是因为你!预赛?
    用户名

    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 (.).';
    }
    

    出生日期

    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';
    }
    

    电子邮件地址

    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 回复  |  直到 14 年前
        1
  •  1
  •   NullUserException Mark Roddy    14 年前

    我会这么做

    <?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>';
    
    ?>