簡體   English   中英

url驗證RegExp將電子郵件地址識別為url

[英]url validation RegExp recognize email address as url

我必須在某些文本中識別網址。 我使用以下代碼( this.value是文本):

if (new RegExp("([a-zA-Z0-9]+://)?([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?([a-zA-Z0-9.-]+\\.[A-Za-z]{2,4})(:[0-9]+)?(/.*)?").test(this.value)) {
    alert("url inside");
}

將電子郵件地址也識別為URL的問題。 我該如何預防?

表達式/[a-zA-Z0-9_]//\\w/i

原始RegExp與“ domain.org”子字符串匹配,例如“ text name@domain.org text mailto:name@domain-2.org text”之類的文本。 要解決此問題,請在RegExp的開頭添加(?:^|[^@\\.\\w-]) -子字符串應位於行的開頭,或者不應以字符'@','。'開始, '-','\\ w'。

要排除“ mailto:user @ ...”子表達式的子字符串([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)? 應該修改。 因為Javascript RegExp沒有后向表達式,所以排除“ mailto”的唯一方法是使用前向表達式\\w(?!ailto:)\\w+:但是所有子字符串都類似於“ [a-zA-Z0-9_ ] ailto:... @ ...”也將被排除。

要從匹配項中排除“ text user.name@domain.org text”之類的文本中的子字符串“ user.name”,請在RegExp的末尾添加表達式(?=$|[^@\\.\\w-]) -僅當行尾在子串之后或以下字符'@','。','-','\\ w'不跟隨子串時,才匹配子串。

 var re = /(?:^|[^@\\.\\w-])([a-z0-9]+:\\/\\/)?(\\w(?!ailto:)\\w+:\\w+@)?([\\w.-]+\\.[az]{2,4})(:[0-9]+)?(\\/.*)?(?=$|[^@\\.\\w-])/im; //if (re.test(this.value)) { // alert("url inside"); //} var s1 = "text name@domain.org name.lastname@domain-2.org text mailto:user.name@domain-3.org text"; if (re.test(s1)) { alert("Failed: text without URL"); } var s2 = "text http://domain.org/ text"; if (!re.test(s2)) { alert("Failed: text with URL"); } alert("OK"); 

暫無
暫無

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

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