2012-02-10 14 views
0

以下の正規表現はネームサーバの最後にドット(。たとえば、ユーザーがns1.hello.comを提出するとエラーが発生します。受け入れる形式は、このような最後にドット付きですns1.hello.com.助けてください。ありがとうございました。ネームサーバの最後に1ドットしか必要ありません。

<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

2つのことは:すべての

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

まず、あなたはelseのことを聞いたことがありませんか?具体的にはそこにあるので、ネガティブにテストを繰り返す必要はありません。

第2に、&&に2つの文字列を組み合わせて、結果のブール値を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; 

これは、広くサブドメインレベルの数に制限を持つほとんどのドメインと一致しますが、最後に.があります提供。セクションの前面に-を禁止する

EDIT

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

+1 - あなたの答えは私のものよりはるかに完全ですが、実際には*実際の質問を除いてすべてを扱うことができます! – ruakh

+0

最後にドットを忘れてしまったXD今修正しました。 –

+0

@Kolink問題があります。ユーザーは末尾2ドット以上の英数字を入力することができ、検証では 'j..'、' 7 ... 'を受け入れます。これは間違っています。私はこの種の形式のagh51-.7ds-a.8jh-9aを受け入れるだけです。あなたが私を理解してくれるといいなあありがとうございました。 – sg552

2

あなたはこのことを言っているように聞こえる:

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

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

は、このする必要がありますか?

+0

問題があり、利用者は、末尾の2ドット以上で任意の英数字をKEYINことができ、検証は 'j..'を受け付けます、 '7 ...'これは間違っています。私はこの種の形式のagh51-.7ds-a.8jh-9aを受け入れるだけです。あなたが私を理解してくれるといいなあありがとうございました。 – sg552

+0

@ sg552:あなたの現在のコードの助けが必要な場合は、それを投稿する必要があります。 (あなたは[あなたの既存の質問を編集できます](http://stackoverflow.com/posts/9229873/edit)) – ruakh

+0

私はあなたの助けに感謝します。問題は解決されました。ありがとうございました。 :) – sg552

1

正規表現内の特殊文字(「メタキャラクタ」とも呼ばれます)をマッチさせるには、バックスラッシュでエスケープする必要があります。だから正規表現の$の直前に、文字列の最後のドットと一致するように

\. 

を入力してください。間違って

+0

問題があります。ユーザーは後ろ2ドット以上の英数字を入力でき、検証では 'j..'、' 7 ... 'を受け入れます。これは間違っています。私はこの種の形式のagh51-.7ds-a.8jh-9aを受け入れるだけです。あなたが私を理解してくれるといいなあありがとうございました。 – sg552

+0

私はあなたの助けに感謝します。ありがとう:) – sg552

関連する問題