url验证RegExp将电子邮件地址识别为url

时间:2015-10-11 07:49:27

标签: javascript regex url-validation

我必须在某些文字中识别网址。 我使用以下代码(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的问题。 我该如何预防?

1 个答案:

答案 0 :(得分:1)

表达式/[a-zA-Z0-9_]//\w/i相同。

原始RegExp匹配文本中的“domain.org”子字符串,如“text name@domain.org text mailto:name@domain-2.org text”。要解决此问题,请在RegExp的开头添加(?:^|[^@\.\w-]) - 子字符串应位于行的开头,或者不应以字符'@','。',' - ','\ w'开头。< / p>

要排除“mailto:user @ ...”子字符串,应修改表达式([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?。因为Javascript RegExp没有后视表达式,所以排除“mailto”的唯一方法是使用前瞻表达式\w(?!ailto:)\w+:,但所有子字符串如“[a-zA-Z0-9_] ailto:... @ ...“也将被排除在外。

要从匹配项中排除子字符串“user.name”,如文本“text user.name@domain.org text”,请在RegExp的末尾添加表达式(?=$|[^@\.\w-]) - 仅在匹配子字符串时才匹配行尾是子串或后面的字符'@','。',' - ','\ w'不跟随子串。

var re = /(?:^|[^@\.\w-])([a-z0-9]+:\/\/)?(\w(?!ailto:)\w+:\w+@)?([\w.-]+\.[a-z]{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");