2010-10-24 39 views
2
if(strlen(trim($steamid)) != 0) 
      { 
       $regex = "/^STEAM_0:(0|1):[0-9]{1}[0-9]{0,8}$/"; 
       if(!ereg($regex, $ssteamid)){ 
        echo "STEAM ID invalida"; 
       } 
      } 

我的問題是,這是不工作,因爲它應該。PHP的正則表達式的最小和最大號碼長度

STEAM ID的具有最多18個字符,並且最小的17

它們總是與開始:STEAM_0:

兩個真實的例子是:STEAM_0:0:11111111; STEAM_0:1:1111111

另一件事是,在STEAM_0之後:總是會有一個0或1個例子。

+0

蒸汽ids沒有最大值或最小值。 – 2011-09-02 21:32:54

回答

3

此:

$regex = "/^STEAM_0:(0|1):[0-9]{1}[0-9]{0,8}$/"; 

可能是writter縮短爲:

$regex = "/^STEAM_0:[01]:[0-9]{1,9}$/"; 

由於您的ID是17或18個字符長,調整正則表達式是:

$regex = "/^STEAM_0:[01]:[0-9]{7,8}$/"; 

最後請注意,自PHP 5.3起,ereg已棄用。這個片斷顯示了preg_match你的PHP /正則表達式:

<?php 

$steamid = "STEAM_0:0:11111111"; 

if(strlen(trim($steamid)) != 0) 
{ 
    $regex = "/^STEAM_0:[01]:[0-9]{7,8}$/"; 
    if(!preg_match($regex, $steamid)) 
    { 
     echo "STEAM ID invalida.\n"; 
    } else { 
     echo "STEAM ID valida.\n"; 
    } 
} 
?> 
+2

用'[01]'代替'(0 | 1)'將防止捕獲,並因此提高性能。 – Tim 2010-10-24 18:12:49

+0

它不工作,STEAM ID就像這樣:STEAM_0:1:2796878 – Afonso 2010-10-24 18:13:43

+0

如果你可以使這個工作的蒸汽,我張貼在上面它適用於我原來的帖子 – Afonso 2010-10-24 18:14:46

0

如果最小長度爲17,最大長度爲18,那麼你們是在錯誤的方式看這個。 這應該爲你做的工作:

$regex = "/^STEAM_0:(0|1):[0-9]{7}[0-9]?$/"; 

並且也有疑問時,測試你的正則表達式與一些在線的正則表達式的工具,如http://www.regexplanet.com/simple/index.html

+0

我剛剛發現代碼中的某些內容是錯誤的,如果您在我的原始文章中注意到有ssteamid insid蒸汽發生,我糾正了它,但仍然與您的正則表達式不起作用,我使用錯誤的功能?我應該使用別的東西而不是ereg? – Afonso 2010-10-24 18:20:02

+0

是的,'eregi'已被棄用,您可以通過'preg_match'實現同樣的功能。有關用法,請參閱http://www.php.net/manual/en/function.preg-match.php。 – ArtBIT 2010-10-24 18:23:47

+0

你可以寫'[0-9] {7} [0-9]?'爲[0-9] {7,8}'。 – Gumbo 2010-10-24 18:27:39

0

試試這個:

$regex = "/^STEAM_0:(0|1):[0-9]{8,9}$/"; 

它匹配:

  • STEAM_0:開頭,跟着 通過
  • 一個01,隨後:,隨後
  • 8或9位數字 ,使得字符17的 總數或18
0

你應該避免使用ereg()及其相關功能;他們已經在PHP中使用了相當長的時間。改用preg_xx()函數(在這種情況下爲preg_match())。

preg_match()和ereg()之間的區別之一是ereg()不希望包含斜線字符來開始和結束正則表達式,而preg_match()卻會這樣做。這可能是你的代碼不能正常工作的主要原因:因爲你已經包含了斜槓,所以你對ereg()的使用將不起作用,但是你切換到preg_match(),同樣的表達式應該可以正常工作。

因此,對preg_match()進行簡單的更改應該會對您的問題進行排序。但是,當我在這裏時,我也可以建議你可以相當大地縮短你的正則表達式字符串。嘗試這樣的:

$regex = "/^STEAM_0:[01]:[0-9]{8,9}$/"; 
if(!preg_match($regex, $ssteamid)) { 
    echo "STEAM ID invalid"; 
} 

希望有幫助。

+0

謝謝大家,我認爲你所有的正則表達式的工作,事情是我正在使用ereg,感謝您的解釋:)現在有效 – Afonso 2010-10-24 18:25:57

+0

如果建議幫助了您,請點擊勾號圖標「接受」其中一個答案在它的旁邊。 :-) – Spudley 2010-10-24 18:30:40

相關問題