2012-10-09 45 views
0

可能重复:
regular expression for letters, numbers and - _确保用户名只包含:包括AZ,az,_, - ,0-9(没有逗号)PHP

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

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

PS:上面提到的字符有什么不对吗?我已经注意到gmail只允许-_。和YouTube只有字母数字字符。

+1

请允许我选择我想要的用户名,而不是任意限制我。谢谢。 – 2012-10-09 20:41:09

+0

@Dragon你想知道我的网站? :) – user115422

+0

@MuqMan我希望所有网站停止强加无意义的限制。 – 2012-10-09 20:47:09

回答

8

编辑使用\ W,而不是-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

可以缩短为'[^ \ w .-]'。 –

+0

@MadaraUchiha thanks updated。 – Sam

+1

等待我也想做_?会工作吗?\ w扩展到数字?w听起来像是代表单词 – user115422

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

等待$电子邮件将是$用户对我来说对不对? $电子邮件需要从@ yahoo.com逃脱 – user115422

+3

您错过了'^' – zerkms

+0

@zerkms - 会不会将这个评估错误?如果字符存在,问题是eval为真。 – circusdei

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

这匹配任何单词后跟连字符。显然不希望。 –

+0

我很欣赏这种努力,但就像他们说的那样,它不起作用。 :( – user115422

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_\-\.][email protected]$/', $mail)) { 
       return true;  
      } 
      return false; 
     } 
    } 

    // The way to use this class 

    $username = "otporan_123"; 
    $email = "[email protected]"; 

    $badUsername = "otporan*bad"; 
    $yahooEmail = "[email protected]"; 

    $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 />"; 

?> 

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

这是一门课,但你可以看到方法中发生了什么d编写自己的函数,如果你喜欢程序代码:)

希望这有助于!

+1

太棒了!我会尝试一下!看起来你正在向我介绍上课和面向对象;) – user115422

+0

我想标记两个答案,但现在我不做OOP很多:) srry不给你满分,但我仍然plus1d你的答案(不谷歌加;)) – user115422

相关问题