2016-09-30 87 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:...