2010-08-17 21 views
0

我用波紋管代碼搜索和查找,如果HTTP是包括在$ URL地址的用戶的preg_match()的簡單問題進入約在PHP

if (!preg_match("/http:///", $user_website) 

,但我得到這個錯誤

Warning: preg_match() [function.preg-match]: Unknown modifier '/' in 

我知道它的http //但是如何工作圍繞這個!

+0

什麼與preg_match廢話?有一個內置的功能,在PHP只是爲此:http://php.net/manual/en/function.parse-url.php – shylent 2010-08-17 06:05:55

+1

感謝您的筆記,但我只是想知道如何解決該錯誤 – 2010-08-17 06:10:15

回答

2

而不必爲躲避URL每/正則表達式通常很有用preg_*代替字符標記模式的開始/結束的。

if (!preg_match("#http://#", $user_website) 
1

轉義/字符與\個字符。

0

您需要轉義文字字符。在正斜槓前放置一個反斜槓。

http://成爲http:\/\/

0
if (!preg_match("/http:\/\//", $user_website) 
2

可以逃脫斜線像其他的答案提及,或者您可以使用不同的分隔符,最好你不會在你的正則表達式使用的字符:

preg_match('~http://~', ...) 
preg_match('!http://!', ...) 

而且你真的不這需要正則表達式。字符串匹配應該是足夠了:

if (strpos($user_website, 'http://') !== false) { 
    // do something 
} 

參見:strpos()

+1

+1提strpos – 2010-08-17 06:03:36

+0

如果已經沒有parse_url函數,將會是+1 – shylent 2010-08-17 06:08:24

+0

@shy它似乎並不像OP想要解析URL – NullUserException 2010-08-17 06:10:53

2

您使用/分隔符的圖案被發現爲好。在這種情況下,您可以逃脫分隔符的格局:

if (!preg_match("/http:\/\//", $user_website) 

,或者你可以選擇不同的分隔符。這將保持清潔模式和短:

if (!preg_match("#http://#", $user_website) 
2

當然,你必須做

$parts = parse_url($my_url); 

$parts['scheme']然後將包含URL方案(可能是 'HTTP')。

+0

+1提供正確的工具。當已經有完美的內置時,不要使用正則表達式來解析URL! 另外,由於缺少'^',OP的正則表達式將匹配'https://示例。com/a/b/c/http:// x/y/z「這是一個足夠有效的URL(我最近遇到了一個從上面的URL提供內容的站點) – 2010-08-17 06:09:48