我必须在某些文本中识别 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 的问题。我该如何预防?
我必须在某些文本中识别 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”。要解决此问题(?:^|[^@\.\w-])
,请在 RegExp 的开头添加 - 子字符串应位于行首或不应以字符 '@'、'.'、'-'、'\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” (?=$|[^@\.\w-])
,请在 RegExp 的末尾添加表达式 - 仅当行尾跟随子字符串或跟随字符 '@'、'.'、'-'、'\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");