簡體   English   中英

如何將網址與正則表達式匹配?

[英]How do I match URLs with regular expressions?

我們要檢查URL是否匹配mail.google.com或mail.yahoo.com(也接受它們的子域),但不檢查在問號后包含此字符串的URL。 我們也希望字符串“mail.google.com”和“mail.yahoo.com”來的URL的第三個斜杠前,例如https://mail.google.com/被接受, https://www.facebook.com/mail.google.com/不被接受,也不接受https://www.facebook.com/?mail=https://mail.google.com/ 也不接受https://mail.google.com.au/ 是否可以使用正則表達式呢?

var possibleURLs = /^[^\?]*(mail\.google\.com|mail\.yahoo\.com)\//gi;
var url;
// assign a value to var url.
if (url.match(possibleURLs) !== null) {
    // Do something...
}

目前,這將同時匹配https://mail.google.com/https://www.facebook.com/mail.google.com/ ,但是我們不想匹配https://www.facebook.com/mail.google.com/

編輯 :我想匹配任何協議(不包含"?""/"任何字符串),然后匹配兩次斜杠"/" (該字符串和斜杠都可以是兩次),然后匹配任何不包含'不能包含"?" "/" (如果不為空,則必須以點"."結尾),然后是(mail\\.google\\.com|mail\\.yahoo\\.com)\\/ 不區分大小寫。

不好笑-但是為什么一定要使用正則表達式?

是否有原因為什么您不能使用URL (或Chrome和Safari中的webkitURL)簡化該過程-URL構造函數只接受一個字符串,然后包含URL的每個部分的屬性。 我不知道它是否支持您要支持的所有主機類型。

當然,在那之后您可能仍需要一個正則表達式(盡管實際上您只是在檢查主機名以yahoo.com或google.com結尾),但是您只是針對URL對象的主機名而不是運行它整個URI。

該API並非無處不在,但是似乎得到了很好的支持,無論如何,如果這是客戶端驗證,那么我希望您也在服務器上對其進行檢查,因為回避JavaScript驗證很容易。

^([-a-z]+://|^cid:|^//)([^/\?]+\.)?mail\.(google|yahoo)\.com/

應該做的把戲

第一個^表示“匹配行首”,第二個取反允許的字符,因此使用斜杠/不允許。

鈮。 您仍然必須轉義斜線,或將其用作new RegExp(string)

new RegExp('^([-a-z]+://|^cid:|^//)([^/\?]+\.)?mail\.(google|yahoo)\.com/')

怎么樣

^[a-z]+:\/\/([^.\/]+\.)*mail\.(google|yahoo).com\/

正則表達式示例鏈接

  • ^在字符串開頭錨定正則表達式

  • [az]+匹配協議。 如果您需要一組特定的協議,則(https?|ftp)可以完成工作

  • ([^.\\/]+\\.)*與次要部分匹配

好的,我發現它適用於:

var possibleURLs = /^([^\/\?]*\/){2}([^\.\/\?]+\.)*(mail\.google\.com|mail\.yahoo\.com)\//gi;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM