0
function demoMatchClick() {
  var validString = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/
  var re = new RegExp(validString);
  if (document.form1.subject.value.test(re)) {
    alert("Successful match");
  } else {
    alert("No match");
  }
}

<INPUT TYPE=SUBMIT VALUE="Replace" ONCLICK="demoReplaceClick()">

ポップアップするアラートをポップアップさせることができません

これらのルールを適用したい

•大文字は使用しないでください。
•文字で始めます。
•最初と最後に少なくとも1桁の数字があります。
•最大8文字の英数字を使用
•@#$文字のような記号(!@#$%^&*()-+のような記号)はありません。

今のところ、ボタンを使用してコードを実行しています。

4

2 に答える 2

1

変更されたコードは次のとおりです。

function demoMatchClick(input) {
  var validString = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/;
  if (validString.test(input)) {
    alert("Successful match");
  } else {
    alert("No match");
  }
}


demoMatchClick("hello world");

validString変数はすでにRegExpオブジェクトであり、直接使用できます。さらに、.test()メソッドは文字列ではなく正規表現オブジェクトに属します。

于 2012-06-19T14:24:54.520 に答える
1

さて、この正規表現はあなたのルールに合っていると思います...

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で設定された検証ルールを確認するのは非常に簡単です。難読化ツールでさえあまり役に立ちません。

于 2012-06-19T14:30:29.833 に答える