2016-09-30 86 views
0

preg_match()用法有什麼問題?我想檢查蒸汽大廳的鏈接,如果它匹配,然後寫入數據庫。如果沒有,只是回顯錯誤。我通過ajax來做這件事。用ajax或$_SERVER["REQUEST_METHOD"] == "POST"做這個更好嗎?PHP preg_match()蒸汽鏈接驗證錯誤

<?php 
require("../includes/config.php"); 
$lobby = "steam://joinlobby/730/109775243427128868/76561198254260308"; 
if (!preg_match("%^((steam?:)+(/joinlobby\/730\/)+([0-9]{17,25}\/.?)+([0-9]{17,25})/$)%i", $lobby)) { 
    echo "Lobby link isn't formatted correctly."; 
} 
else { 
    $rank = "Golden"; 
    $mic = "No"; 
    try { 
     $stmt=$db->prepare("INSERT INTO created_lobby (lobby_link, current_rank, have_mic) VALUES (:lobby_link, '$rank', '$mic')"); 
     $stmt->execute(array(
     ':input_link' => $_POST['lobbyLink'] 
     )); 
    } 
    catch(PDOException $e) { 
     echo "Error: " . $e->getMessage(); 
    } 
} 
?> 

我的問題: 當我執行這個代碼,它將給我假的。

謝謝你的幫助。

+0

至於這個代碼無法正常工作? –

+0

對不起,我忘了補充一點。現在在說明 –

+0

如果您使用'%'作爲正則表達式分隔符,則不需要轉義'/'。 – Barmar

回答

0

這工作:

$lobby = "steam://joinlobby/730/109775243427128868/76561198254260308"; 
if (!preg_match("%^(steam?:)+(//joinlobby/730/)+([0-9]{17,25}/.?)+([0-9]{17,25}$)%i", $lobby)) { 
    echo "Lobby link isn't formatted correctly."; 
} 

我在最後改變/joinlobby//joinlobby,並刪除/。我也刪除了一切不必要的()

我懷疑你也不應該有(...)+steam?://joinlobby/730/。他們會重複使用這些前綴以被接受爲正確的,例如, steam:steam:...