2016-09-30 3 views
0

preg_match()의 사용법에 문제가 있습니까? 증기 로비 링크를 확인하고 일치하면 데이터베이스에 씁니다. 그렇지 않으면 오류를 반향하십시오. 나는 아약스를 통해 이것을하고있다. 아약스 또는 $_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:...