我们想要检查网址是否与 mail.google.com 或 mail.yahoo.com(也接受它们的子域)匹配,但不检查在问号后包含此字符串的网址。我们还希望字符串“mail.google.com”和“mail.yahoo.com”出现在网址的第三个斜杠之前,例如 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/
。
编辑:我想匹配任何协议(protocol)(任何不包含 "?"
和 "/"
的字符串),后跟斜杠 "/"
两次(字符串和斜杠都可以是两次),然后是任何不包含 "?"
和 "/"的字符串
(如果不为空,则必须以点 "."
结尾),然后是 (mail\.google\.com|mail\.yahoo\.com)\/
。不区分大小写。
最佳答案
一点都不好笑 - 但为什么它必须是正则表达式?
是否有原因导致您无法使用 URL 简化流程? (或 Chrome 和 Safari 中的 webkitURL)- URL constructor只需获取一个字符串,然后包含 URL 各部分的属性。它是否支持你想要支持的所有主机类型,我不知道。
当然,之后您可能仍然需要一个正则表达式(尽管实际上您只是检查主机名是否以 yahoo.com 或 google.com 结尾),但您只需针对 URL 的主机名运行它对象而不是整个 URI。
该 API 并不普遍,但似乎得到了很好的支持,无论如何,如果这是客户端验证,那么我希望您也在服务器上检查它,因为绕过 javascript 验证很容易。
关于javascript - 如何将 URL 与正则表达式进行匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27374283/