如何检查用户是否向我的应用程序输入了一个url到终端中?是否有某种我可以使用的正则表达式?检查来自用户的输入是C中的url吗?
我在Linux中从终端获取输入并将其存储在char str [100]变量中。
编辑* 我需要检查他们只能输入实际存在的URL,如果可能的话。
如何检查用户是否向我的应用程序输入了一个url到终端中?是否有某种我可以使用的正则表达式?检查来自用户的输入是C中的url吗?
我在Linux中从终端获取输入并将其存储在char str [100]变量中。
编辑* 我需要检查他们只能输入实际存在的URL,如果可能的话。
我使用这个正则表达式。尽管如此,它不允许......。
^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
标准库有一些正则表达式函数(man正则表达式)。您也可以使用PCRE等第三方库。
编辑*我需要检查,他们只能进入实际存在的,如果这是可能的一个网址构建它。
您可以对给定的URL发出HEAD请求并检查返回的http状态码。如果您忽略临时故障,它应该告诉您资源是否可访问,例如make http HEAD request in C using libcurl。
我如何可以检查用户输入了网址到终端应用?是否有某种我可以使用的正则表达式?
rfc 3986提供的正则表达式打破向下一个合式 URI引用成它的组分:
/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/
注2件事:
要验证网址,你可以使用上述正则表达式拆分输入,并检查各部分是你的具体情况如有效,该计划是'http'
,查询&片段是空的,等的代码应该更简单理解和调试超过一个巨大的不透明正则表达式。
同意。最好使用通用组件拆分,然后验证碎片。 (更重要的是,正确验证主机名之类的东西不仅仅需要字符串处理。) – 2012-02-26 14:17:36
您需要检查例如是http://stackoverflow.com/rubbish有效吗? – Mark 2012-02-26 13:41:10