0

javascript 関数を使用して html フォームを検証しようとしていますが、値が正しい場合でも関数が値を正規表現に一致させることはありません。これは私が持っているものです:

function validateForms(form){
var usZipRegex = '^\d{5}[[$-.+ ]?\d{4}]?$|^\d{5}$';
var canZipRegex = '^[ABCEGHJKLMNPRSTVWXY][\d][ABCEGHJKLMNPRSTVWXYZ][\W]?[\d][ABCEGHJKLMNPRSTVWXYZ][\d]$';
var nameRegex = '^[A-Za-z][ -a-zA-Z]+$';
var emailRegex = '^[^\.@]([\w]*\.)*[^\.@]*@[a-zA-Z0-9-]{1,63}(\.[a-zA-Z0-9-]{1,63})+$';
var name = form.name.value;
var zip = form.zip.value;
var email = form.email.value;
var comment = form.comment.value
if(name == "") {
  alert('You must enter your name.');
  return false;
}
if(name != nameRegex) {
  alert('You have entered an invalid name.');
  return false;
}
 if(email == "") {
  alert('You must enter your email.');
  return false;
}
if(email != emailRegex) {
 alert('You have entered an invalid email.');
 return false;
}
  if(zip == "") {
  alert('You must enter your zip code.');
  return false;
}
if((zip != usZipRegex) & (zip != canZipRegex)) {
 alert('You have entered an invalid zip code.');
 return false;
}
 if(comment == "") {
 alert('You must enter a message.');
 return false;
}
return true;
}

(name != nameRegex) 部分は常に true を返しますが、返すべきではありません。ただし、 (name == "") の部分は単独で機能します。

4

1 に答える 1

3

正規表現を実行するのではなく、生の文字列を比較しています。name != nameRegex人の名前が文字通りでない限り、常にtrueを返します^[A-Za-z][ -a-zA-Z]+$。正規表現オブジェクトとして適切に設定する必要がありnameRegexますが、コードでは、これは単なる文字列です。またtest、== /!=演算子ではなく、RegExpオブジェクトのメソッドのいずれかを使用して一致をチェックする必要があります。これは他のパターンにも当てはまります。

正規表現の作成は、次の2つの方法のいずれかで行われます。

var regex1 = /[a-z0-9]/;
var regex2 = new RegExp('[a-z0-9]');

ただし、このようにすると、文字列になります。

var notARegex = '[a-z0-9]';

コードは次のスタイルに近いはずです。

var nameRegex = /^[A-Za-z][-a-zA-Z ]+$/; //note that the hyphen has been moved
//...
if (!nameRegex.test(name)) {
   alert('You have entered an invalid name.');
   return false;
}

編集:ここでもっとうまくいかないことがあります。他の正規表現コードでは、いくつかの主要な改善を使用できます。

var usZipRegex = /^\d{5}([$.+ -]?\d{4})?$/;
var canZipRegex = /^(?![DFIOQU])[A-Y]\d(?![DFIOQU])[A-Z]\W?\d(?![DFIOQU])[A-Z]\d$/;
var nameRegex = /^[a-z][a-z\s-]+$/i;
var emailRegex = /^[^.@]+@[^.@]{1,63}(\.[^.@]{1,63})+$/i';

カナダの郵便番号のパターンが正しいかどうかはわかりませんが、メールのパターンは間違いなく間違っていました(メールは思ったよりもはるかに複雑なので、非常に寛容であることが最善です)。

于 2012-04-25T19:55:58.753 に答える