Jquery как проверить доменное имя

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть поле ввода, в котором пользователи могут вводить доменное имя, которое они хотят найти.

Мой поиск по домену поддерживает только такие запросы, как: «something.com » или «что-то»

И это поддерживает только .com, .net, .org

Что я хочу сделать, это проверить ввод пользователя перед вызовом ajax и отобразить сообщение об ошибке, если что-то не так. Например, если пользователь вводит: «asdasdasd.asdasd» или «wwwasd.asdasd» или «www.asdasd.dk «

 #domainsearch is the input field

#domanerknap is the search button
  

Вот мой Jquery:

 $(document).ready(function() {
    $('#domanerknap').click(function(e) {
        var doma = $('#domainsearch').val();
        $('#contentajax').empty()
                         .css("border", "1px solid #CCCCCC")
                         .html('<p class="vent">Please wait...</p><p class="venter"><img src="../images/ajax.gif" /></p>');
        $.ajax({
            type: 'POST',
            url: 'http://localhost:3000/domain',
            data: {
                domain: doma
            },
            success: function(msg){
                $('#contentajax').html(msg);
                $('#contentajax').css("border", "none");
            }
        });        
    });
});
  

Ответ №1:

Используйте шаблон, как показано ниже. Для построения этого шаблона я использовал следующие правила:

  • Домен не должен содержать протокол
  • Допустимым доменным именем являются только буквенно-цифровые символы и дефисы
  • Разрешены поддомены
  • Домен верхнего уровня должен быть одним из следующих: com net org

Я также включил динамическое сопоставление, чтобы протоколы и пути автоматически пропускались при вводе.

 var domainPattern = /^(https?://)?((?:[a-z0-9-] .) (?:com|net|org))(?:/|$)/i
if(doma.match(domainPattern)){
    doma = doma[1]; //Get the domain parth
    $.ajax(...); //Valid
}
  

Комментарии:

1. @Railsbeginner Если вы хотите выбрать корневой домен, используйте /([a-z0-9-] .(?:com|net|org))(?:/|$)/i . Этот шаблон попытается выбрать соответствующий URL-адрес из заданной строки, например "my site is example.com/mysite" —> example.com .

2. вероятно, вам следует избегать вашего - знака между скобками

3. @gion_13 Дефис внутри квадратных фигурных скобок не нужно экранировать, когда он находится в начале или в конце квадратных фигурных скобок. @Railsbeginner Используя /([a-z0-9-] .(com|net|org))/ шаблон (см. Ответ), вы можете ссылаться на example.com использование doma[1] и на com использование doma[2] .

4. @Rob Например, мой var doma — «wwwwwwwwwww.dddddddd», и я создал предупреждение («недопустимое доменное имя» doma [2]); ошибка «недопустимое доменное имя», а не «недопустимое доменное имя.dddddddd»

5. @Railsbeginner Чтобы получить исходный ввод, используйте doma[0] .

Ответ №2:

используйте регулярное выражение, чтобы проверить, действителен ли домен. Такое регулярное выражение может быть :

 /^(http(s)?//:)?(www.)?[a-zA-Z-]{3,}(.(com|net|org))?$/
  

Затем, прежде чем отправлять вызов ajax, проверьте, соответствует ли ввод регулярному выражению :

 $(document).ready(function() {
    $('#domanerknap').click(function(e) {
        var doma = $('#domainsearch').val();
        if(!/^(http(s)?//:)?(www.)?[a-zA-Z-]{3,}(.(com|net|org))?$/.test(doma))
            {
                alert('invalid domain name');
                return false;
            }
        $('#contentajax').empty()
                         .css("border", "1px solid #CCCCCC")
                         .html('<p class="vent">Please wait...</p><p class="venter"><img src="../images/ajax.gif" /></p>');
        $.ajax({
            type: 'POST',
            url: 'http://localhost:3000/domain',
            data: {
                domain: doma
            },
            success: function(msg){
                $('#contentajax').html(msg);
                $('#contentajax').css("border", "none");
            }
        });        
    });
});
  

Комментарии:

1. При отправке «asdasdasd» указано «Недопустимое доменное имя», которое оно должно разрешить, как это изменить?

2. см. Обновление. sry, я пропустил тот факт, что вы хотели иметь возможность исключить расширение домена

3. Как вызвать и пример ошибки, если var doma имеет значение «testsome.oaa», то ошибка будет «.ooa не поддерживается или недействителен», а если var doma «www.adsasd » это вызвало бы ошибку недопустимое доменное имя » www.adsasd »

Ответ №3:

 if( !doma.match(/^[a-z0-9_-] (.(com|net|org))?$/i)) { /* error stuff here */
else $.ajax(...);
  

Что-то подобное, я бы предположил, исходя из приведенных вами примеров допустимого ввода.

Вы также можете поместить часть между /.../ в pattern атрибуте input элемента, и поддерживающие браузеры сопоставят ее, прежде чем разрешить отправку.

Комментарии:

1. он принимает dash в начале доменного имени, пример: -new.com что, очевидно, неверно…