Требуется только одна точка в конце сервера имен - PullRequest
0 голосов
/ 10 февраля 2012

Регулярное выражение ниже хорошо работает, за исключением того, что мне нужна только одна точка (.) В конце для сервера имен.Например, если пользователь отправит ns1.hello.com, будет ошибка.Принятый формат с точкой в ​​конце, как это ns1.hello.com. Помогите мне, пожалуйста.Спасибо.

    <script type="text/javascript">



function validSubdomain() {

    var re = /^[a-zA-Z0-9][a-zA-Z0-9.-]+\.$/;



    var val = document.getElementById("nameserver").value;

    var val2 = document.getElementById("nameserver2").value;



if(val == '' && val2 == ''){

     alert("Please fill in the name server"); 

     document.forms['namaform'].elements['nameserver'].focus();

     return false; 

} 



if(val == ''){

     alert("Please fill in the name server 1"); 

     document.forms['namaform'].elements['nameserver'].focus();

     return false; 

} 

if(val2 == ''){

     alert("Please fill in the name server 2"); 

     document.forms['namaform'].elements['nameserver2'].focus();

     return false; 

} 



var parts = val.split('.');

var parts2 = val2.split('.');

if (parts.length < 3) 

{ alert('invalid nameserver format') 

document.forms['namaform'].elements['nameserver'].focus();

return false;

}

else if (parts2.length < 3) 

{ alert('invalid nameserver 2 format') 

document.forms['namaform'].elements['nameserver2'].focus();

return false;

}









if( !re.test(val)) {

    alert("invalid nameserver 1 format");

    return false;

}

else if( !re.test(val2)) {

    alert("invalid nameserver 2 format");

}

else{namaform.submit();}







}

</script>

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

Две вещи не так с:

if(re.test(val && val2)) {  
    alert("valid format"); 
} 
if(!re.test(val && val2)) { 
    alert("invalid format"); 
} 

Прежде всего, вы никогда не слышали о else? Это специально для того, чтобы вам не пришлось повторять тест отрицательно.

Во-вторых, вы пытаетесь && объединить две строки и затем передать полученное логическое значение в re.test(). Поскольку логическое значение преобразуется в строку "true" или "false", оно никогда не будет совпадать.

Изменить на:

if( re.test(val) && re.test(val2)) {
    alert("valid format");
}
else {
    alert("invalid format");
}

Также обратите внимание, что ваше регулярное выражение неверно. Он будет принимать a..b в качестве ввода, что явно недопустимо. Попробуйте вместо этого:

var re = /^([a-z0-9-]+\.)+[a-z]{2,3}\.$/i;

Это будет широко соответствовать большинству доменов с неограниченным количеством уровней поддоменов, при условии, что в конце будет ..

РЕДАКТИРОВАТЬ , чтобы запретить - в передней части секции:

var re = /^([a-z0-9][a-z0-9-]*\.)+[a-z]{2,3}\.$/i;
2 голосов
/ 10 февраля 2012

Похоже, вы просто говорите, что это:

    var re = /^[a-zA-Z0-9][a-zA-Z0-9.-]+[a-zA-Z0-9]$/;

должно быть так:

    var re = /^[a-zA-Z0-9][a-zA-Z0-9.-]+\.$/;

1 голос
/ 10 февраля 2012

Если вы хотите сопоставить специальный символ в регулярном выражении (также называемый метасимволами), вам нужно экранировать его обратной косой чертой.Поэтому перед символом $ в регулярном выражении добавьте

\.

, чтобы сопоставить точку в конце строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...