【问题标题】:How to allow only a certain set of domains in javascript and throw an alert if its not matchin?如何在javascript中只允许特定的一组域并在不匹配时发出警报?
【发布时间】:2015-12-02 05:53:15
【问题描述】:

我需要通过将文本框中输入的 url 与一组有效域进行比较来验证它是否是有效域,如果不匹配则返回警报。你能帮我解决这个问题吗?

URL 格式应为http://www..abc.com/cdef..http://www..xyz.com 等。

我尝试过使用这个正则表达式:

regex = /((http|https):\/\/)(www.)?([a-zA-Z0-9]+).((abc.com)|(xyz.com)).*/   

但它没有产生适当的结果。希望这些信息对您有所帮助。

【问题讨论】:

  • 你试过什么?这取决于您的域,正则表达式的外观!为什么要在客户端进行验证?为什么使用正则表达式?请添加更多上下文。

标签: javascript regex


【解决方案1】:

您可以使用 JavaScript URL 对象及其 host 属性来做到这一点:

function isAllowed(urlString)
{
    var allowed = ['example.com', 'stackoverflow.com', 'google.com'];
    var urlObject = new URL(urlString);

    return allowed.indexOf(urlObject.host) > -1;
}

console.log(isAllowed('http://example.com/path/?q=1')); // true
console.log(isAllowed('https://subdomain.example.com/')); // false
console.log(isAllowed('http://stacksnippets.net')); // false

if (!isAllowed(document.getElementById('yourTextbox').value))
{
    alert('Domain is not allowed!');
}

请注意,它可能不适用于所有浏览器。
检查给定参考中的兼容性表。

【讨论】:

  • 对于旧浏览器,我想我记得锚元素也有这个 host 属性,所以如果不支持 URL,var a = document.createElement('a'); a.href=urlString; return a.host; 应该是一个可能的后备。不过不确定。
【解决方案2】:

这是一个基本的编程练习。 您可以使用将您的网址放入一个数组中,然后遍历它们以检查您输入的内容。

这是我快速拼凑起来的一个 jsfiddle。之后学习自己编写它,您可以将小程序组合在一起来帮助您完成日常任务。

var listOfUrl = [
 'www.yahoo.com', 
 'www.google.com',
 'www.bing.com'
 //enter more url here...
 ];


 for(var i = 0; i <= listOfUrl.length; i++) {
   if(listOfUrl[i] === enteredUrl){
   document.getElementById('result').innerHTML = 'there is a match';
   return;
 }

http://jsfiddle.net/henryw4k/5mogf06t/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多