2010-12-12 63 views
19

驗證一個Twitter用戶名我已經使用的模式/[a-z0-9_]+/i函數內:如何使用正則表達式

function validate_twitter($username) { 
if (eregi('/[a-z0-9_]+/i', $username)) { 
    return true; 
} 
} 

有了這個,我測試,如果輸入的是一個有效的Twitter用戶名,但我有困難,因爲它沒有給我一個有效的結果。

有人可以幫我找到解決方案。

+1

請注意,ereg *函數從PHP 5.3.0開始已棄用,請使用preg_ *函數,而在此情況下使用preg_match。 – 2010-12-12 21:40:19

+0

向我們展示輸入,預期輸出和實際輸出也將對我們有所幫助... – npinti 2010-12-12 21:41:06

+0

我相信這是http://stackoverflow.com/questions/4766158/php-to-replace-username-with -link-to-twitter-account – Dan 2013-04-30 21:38:57

回答

36

爲了驗證一個字符串是否是一個有效的Twitter句柄:

function validate_username($username) 
{ 
    return preg_match('/^[A-Za-z0-9_]{1,15}$/', $username); 
} 

如果你想匹配字符串內的@username

例如:RT @username: lorem ipsum @cjoudrey etc...

使用以下:

$string = 'RT @username: lorem ipsum @cjoudrey etc...'; 
preg_match_all('/@([A-Za-z0-9_]{1,15})/', $string, $usernames); 
print_r($usernames); 

您可以使用後者與preg_replace_callback到linkify用戶名中的字符串。

編輯:Twitter也open sourced text libraries爲Java和Ruby匹配的用戶名,哈希標籤等。您可能可以看看代碼,並找到他們使用的正則表達式模式。

編輯(2):這裏是Twitter的文本庫的PHP接口:https://github.com/mzsanford/twitter-text-php#readme

+3

上述模式也將匹配電子郵件地址,例如[email protected]會返回@email,這顯然不是Twitter用戶名。我解決了這個問題,增加了負向預測(?![.A-Za-z])全字符串:/@([A-Za-z0-9_]{1,15})(?![.A- Za-z])/ – KryptoniteDove 2013-02-25 20:25:48

+2

不是[A-Za-z0-9_]與\ w – Ayyash 2013-07-03 06:09:48

+1

相同@ KryptoniteDove的評論應該在這裏用作答案,因爲它是正確的並克服了一個煩人的問題。你能更新嗎? http://regexr.com/38pig – EvilDr 2014-05-01 13:51:38

2

我相信你正在使用PCRE表格,在這種情況下,你應該使用preg_match函數。

3

請勿使用/ereg*

事實上,如果可以避免的話,根本不要使用ereg*http://php.net/preg_match

編輯:還要注意/[a-z0-9_]+/i將匹配spaces are invalidnot-a-real-name。你幾乎肯定想要/^[a-z0-9_]+$/i

小號

2

eregi()不會對任何/或額外的切換。只需使用eregi('[a-z0-9_]+')

2

的Twitter用戶名有1到15個字符......所以這可能是更好的與/^[a-z0-9_]{1,15}$/i

+1

我想,Twitter允許他們的用戶名至少有3個字符。 – 2011-12-20 20:11:14

+1

我認爲它現在可以,但以前的用戶能夠註冊較短的用戶名(如[@a](https://twitter.com/a)),所以您仍然需要使用至少1個字符抓住這些。 – cmbuckley 2012-03-27 14:18:56

+1

感謝您的回答。你在哪裏找到字符集?我的意思是,你在哪裏讀過Twitter用戶名可以是[A-Za-z0-9 _] {1,15}? – Qualcuno 2012-04-27 09:15:52