2013-07-31 39 views
0

我正在寻找某种形式的输入安全性,我正在对一个项目进行研究。 基本上我希望标记文本,如果用户输入任何形式的URL。PHP在字符串中查找任何形式的URL

IE“欲了解更多我的照片访问myhotpic.net的”

因此,它会检测到一个URL,然后我可以标志通过工作人员验证字符串。 所以我需要检查任何形式的URL。

还有一个类似的问题在这里 Finding urls from text string via php and regex? 与答案。但我已经厌倦了这种各种字符串,我没有得到预期的结果。

例如

$pattern = '#(www\.|https?:\/\/){?}[a-zA-Z0-9]{2,254}\.[a-zA-Z0-9]{2,4}(\S*)#i'; $count = preg_match_all($pattern, 'http://www.Imaurl.com', $matches, PREG_PATTERN_ORDER);

收益为

array(3) { 
    [0]=> 
    array(0) { 
    } 
    [1]=> 
    array(0) { 
    } 
    [2]=> 
    array(0) { 
    } 
} 

相匹配,并且没有错误通过preg_last_error()

返回这是为什么不工作? Regex中是否有错误?当其他用户使用它时,我会认为它没问题。

我似乎无法为其他地方的问题找到合适的答案。

+1

把'{?}'变成只是'?',它似乎工作正常。不知道'{?}'应该做什么;我从来没有见过这样的事情。 – sgroves

+0

我只想找“www”,“http”,任何东西。[a-z] {2,3}等。如果只想检测url并且不需要实际提取它,这应该可以正常工作。 – MightyPork

+1

@mightypork如果其中一个字符串包含文字谈论HTTP协议?或'www'用来代表笑声?我不确定这么简单是最好的方法。使用完整的正则表达式没有任何问题;这个不是很复杂。 – sgroves

回答

1

在正则表达式中,将{?}更改为?。然后它会工作。不知道{?}应该是什么意思(我从来没有见过这样的东西)。

你的正则表达式将工作的优良一些网址,但你应该知道,URL可以是复杂得多,你可能会认为,和正则表达式可以匹配 URL是非常复杂的。您可能想要查找更好的正则表达式 - 您只需要一个足够复杂的处理您期望匹配的各种URL。