2012-02-26 33 views
0

如何检查用户是否向我的应用程序输入了一个url到终端中?是否有某种我可以使用的正则表达式?检查来自用户的输入是C中的url吗?

我在Linux中从终端获取输入并将其存储在char str [100]变量中。

编辑* 我需要检查他们只能输入实际存在的URL,如果可能的话。

+0

您需要检查例如是http://stackoverflow.com/rubbish有效吗? – Mark 2012-02-26 13:41:10

回答

1

我使用这个正则表达式。尽管如此,它不允许......。

^https?://(((0|([1-9][0-9]{0,1}))(\.(0|([1-9][0-9]{0,1}))){3})|([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*(\.([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+!*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*))*))(/|((/([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+!*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*))*))$ 

PS:我从RFC

0

标准库有一些正则表达式函数(man正则表达式)。您也可以使用PCRE等第三方库。

1

编辑*我需要检查,他们只能进入实际存在的,如果这是可能的一个网址构建它。

您可以对给定的URL发出HEAD请求并检查返回的http状态码。如果您忽略临时故障,它应该告诉您资源是否可访问,例如make http HEAD request in C using libcurl


我如何可以检查用户输入了网址到终端应用?是否有某种我可以使用的正则表达式?

rfc 3986提供的正则表达式打破向下一个合式 URI引用成它的组分:

/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/

注2件事:

  • 它不验证输入
  • 它已经很复杂了

要验证网址,你可以使用上述正则表达式拆分输入,并检查各部分是你的具体情况如有效,该计划是'http',查询&片段是空的,等的代码应该更简单理解和调试超过一个巨大的不透明正则表达式。

+0

同意。最好使用通用组件拆分,然后验证碎片。 (更重要的是,正确验证主机名之类的东西不仅仅需要字符串处理。) – 2012-02-26 14:17:36