2012-02-26 31 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