4

jQuery検証内で電話番号を検証しようとしていますが失敗しています。私が欲しいのは、のような数を許可することです(01660) 888999。ネットを見回すと、100万の例が見つかりましたが、何も機能していないようです。これが私の現在の取り組みです

$.validator.addMethod("phonenumber", function(value) {
  var re = new RegExp("/[\d\s()+-]/g");
  return re.test(value);
  //return value.match("/[\d\s]*$");
}, "Please enter a valid phone number");
4

3 に答える 3

5

ベルギは、正規表現を作成する方法が間違っているというのは正しいです。

もう1つの問題は、アンカーと+:が欠落していることです。

var re = /^[\d\s()+-]+$/;

ただし、正規表現ベースのソリューションでは、有効な電話番号ではない一部の入力が引き続き許可されることに注意してください。正規表現はさまざまな方法で改善できます。たとえば、少なくともx桁の数字が必要になる場合があります。

どの電話番号が有効か無効かについては多くの規則があります。これらすべてのルールを保守可能な方法で正規表現にエンコードできる可能性は低いため、次のいずれかのアプローチを試すことができます。

  • 電話番号を検証できるライブラリを見つけます(ただし、正規表現ベースではない可能性があります)。
  • 正規表現が必要な場合は、ルールに近いものを目指しますが、すべての特殊なケースを処理しようとはしません。すべての有効な電話番号を受け入れる式を作成することをお勧めしますが、必ずしもすべての無効な電話番号を拒否するわけではありません。

ソリューションのテストケースを作成することも検討してください。テストは、どの入力を受け入れて拒否したいかを文書化する形式としても機能します。

于 2012-08-04T12:24:07.387 に答える
2

コンストラクターでは、正規表現リテラルまたは文字列リテラルのいずれかを使用する必要があります。RegExp

var re = /[\d\s()+-]/g;
// or
var re = new RegExp("[\\d\\s()+-]", "g");

正規表現の作成も参照してください。

それとは別に、正規表現が文字列の一部だけでなく文字列全体と一致することを確認するために文字列の開始アンカーと終了アンカーを使用する必要があります。また、複数の文字を許可するための繰り返し修飾子もあります。

var re = /^[\d\s()+-]+$/g;
于 2012-08-04T12:25:32.857 に答える
1

別のアプローチは次のとおりです。

function(value) {
  return /^\d+$/.test(value.replace(/[()\s+-]/g,''));
}

数値の長さも確認したい場合は、10桁の文字列である必要があると言います。

function(value) {
  return /^\d{10}$/.test(value.replace(/[()\s+-]/g,''));
}
于 2012-08-04T12:31:25.227 に答える