2012-10-09 47 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

相關問題