さて、この正規表現はあなたのルールに合っていると思います...
var rules = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/;
しかし、私はあなたのコードにいくつかの問題があると思います。それを指摘したいと思います。それを個人的な犯罪と見なさないでください。私を信じてください。私は実際にあなたに多くの時間と神経を節約しています。
まず、標準的なルールがあります。各関数は1つのことだけを実行する必要がありますが、それは本当にうまく実行されます(つまり、これらの完璧主義者です!)。あなたのコードはDOM抽出と緊密に結合されています:私の環境に貼り付けたときにそれが機能しなかったとき、私は本当に驚きました!その時だけ、私はそのdocument.forms
呼びかけに気づきました。ここでは実際には必要ありません。1つのパラメーターを受け取る関数を作成してから、別の場所で抽出された値を使用してこの関数を呼び出すだけで十分です。このようにして、エラーの原因を簡単に分離できます。それはDOM部分にあるか、関数内にあります。
第二に、正規表現はJavaScriptで一級市民と見なされるのに非常に近いです(Perlの場合ほどではありませんが、他のいくつかの言語よりもはるかに近いです)。つまり、正規表現リテラルをそのまま記述し、後で使用することができます-新しい正規表現構造は必要ありません。
そうは言っても、私はあなたのコードを次のように書きます...
function validatePassword(password) {
var rules = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/;
return rules.test(password);
}
...それからそれを次のようなもので使用します...
var password = document.form1.subject.value;
alert( validatePassword(password) ? 'Success! :)' : 'Failure... :(' );
PSそして、そうです、Riccardoは正しいです。パスワードに厳しすぎるルールを設定し、攻撃者の検索範囲を狭めるという結果に苦しんでいます。また、Javascriptで設定された検証ルールを確認するのは非常に簡単です。難読化ツールでさえあまり役に立ちません。