Denise Macko Denise Macko - 11 months ago 46
PHP Question

PHP preg_match() steam link validation error

What's wrong with this

usage? I want to check steam lobby link and if it's matching then write to database. If not, just echo the error. I am doing this through ajax. Is it better to do this with ajax or

$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')");
':input_link' => $_POST['lobbyLink']
catch(PDOException $e) {
echo "Error: " . $e->getMessage();

My Problem:
When I execute this code, it will give me false.

Thank you for help.

Answer Source

This works:

$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.";

I changed /joinlobby to //joinlobby, and remove the / at the end. I also removed the unnecessary () around everything.

I suspect you also shouldn't have (...)+ around steam?: and //joinlobby/730/. They'll cause repeated uses of those prefixes to be accepted as correct, e.g. steam:steam:...