确保用户名仅包含:A-Z,a-z,。,_, - ,0-9(无逗号)PHP

时间:2012-10-09 20:35:47

标签: php regex string validation

  

可能重复:
  regular expression for letters, numbers and - _

我在PHP中创建一个注册表单,需要确保用户的用户名不包含不需要的字符。无论如何,我可以创建一个为A-Z a-z 0-9 - . _返回true的函数。

此外,我不希望用户的电子邮件来自雅虎,因为他们拒绝发送的确认电子邮件。与__FILTER_VALIDATE_EMAIL__一起,我需要添加什么?

PS:我上面提到的角色有什么问题吗?我注意到gmail不允许-_。和YouTube仅限字母数字字符。

4 个答案:

答案 0 :(得分:8)

编辑使用\ w而不是a-zA-Z0-9 _

if(preg_match("/[^\w-.]/", $user)){
    // invalid character
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL) || strstr($email,'@yahoo.com')) {
    // either invalid email, or it contains in @yahoo.com
}

答案 1 :(得分:2)

if(preg_match("/[^-A-Za-z0-9._ ]/", $userName)){
    // there are one or more of the forbidden characters (the set of which is unknown)
}

答案 2 :(得分:2)

<?php

    // The validator class

    class Validator
    {
        public function isValidUsername($username)
        {
            if(preg_match('/^[a-zA-Z0-9_\-\.]+$/', $username)) {
                return true;    
            }
            return false;
        }

        public function isYahooMail($mail) {
            if(preg_match('/^[a-zA-Z0-9_\-\.]+@yahoo.com$/', $mail)) {
                return true;    
            }
            return false;
        }
    }

    // The way to use this class

    $username = "otporan_123";
    $email = "otporan@gmail.com";

    $badUsername = "otporan*bad";
    $yahooEmail = "otporan@yahoo.com";

    $validator = new Validator();

    var_export($validator->isValidUsername($username));
    echo "<br />";

    var_export($validator->isValidUsername($badUsername));
    echo "<br />";

    var_export($validator->isYahooMail($email));
    echo "<br />";

    var_export($validator->isYahooMail($yahooEmail));
    echo "<br />";  

?>

此代码将返回: 真正 假 假 真

这是一个类,但如果您喜欢过程代码,您可以看到方法中正在进行的操作并编写自己的函数:)

希望这有帮助!

答案 3 :(得分:-1)

if (!preg_match('/\w\-/', $username) {
    //throw error 
}