PHP preg_match()蒸汽链接验证错误
问题描述:
这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();
}
}
?>
我的问题: 当我执行这个代码,它将给我假的。
谢谢你的帮助。
答
这工作:
$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:...
至于这个代码无法正常工作? –
对不起,我忘了补充一点。现在在说明 –
如果您使用'%'作为正则表达式分隔符,则不需要转义'/'。 – Barmar