#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
что, очевидно, неверно…