1

Javascript を使用して郵便番号の範囲を検証しようとしています。メソッドに国固有の検証規則を提供するフレームワークは、正規表現を使用します。

範囲区切り文字 (この場合はコロン) の両側の文字数が同じ場合、検証する方法はありますか (正規表現の一致/テスト/その他の js 正規表現関数を使用)。

85001:85255orA9A 9AA:A9A 9ZZは有効です (両側の文字数は同じです)

or は無効です85001:255( A9A 9AA:9ZZx:y の x と y の文字数が異なります)

ありがとう

4

6 に答える 6

2

ここでは、@ tak3r によって提供された RegExp の少し冗長なバージョンを示します。

var r = /^(.{1}:.{1}|.{2}:.{2}|.{3}:.{3}|.{4}:.{4}|.{5}:.{5}|.{6}:.{6}|.{7}:.{7})$/
于 2013-10-13T02:38:50.573 に答える
1

正規表現のパラダイムの 1 つは、数えられないことです。

ただし、側面の文字数の最大長がわかっている場合は、そのように「ハック」できます。最大長を 4 と仮定すると、次のようになります。

var code = '8500:1234';
/\b((.:.)|(..:..)|(...:...)|(....:....))\b/.test(code)

これを手で書きたくない場合は、次のように正規表現を生成できます。

var max_length = 6;
var delimiter = ':';

var regexp = [];
for (var i=1; i<=max_length; ++i) {
  var side = '';
  for (var j=1; j<=i; ++j) {
    side += '.';
  }
  regexp.push('(' + side + delimiter + side + ')');
}
regexp = '\b(' + regexp.join('|') + ')\b';
regexp = new RegExp(regexp);
于 2013-10-13T02:32:57.940 に答える
0

あなたの2つの郵便番号を考えると、ちょっと考えてみてください:

var s1 = "85001:85255";
var s2 = "A9A 9AA:A9A 9ZZ";

この正規表現は、コロンの前後の 5 桁のパターン、または文字または数字の 3 桁の後にスペースが続き、さらにコロンの前後の文字または数字の 3 桁のパターンをテストします。

//var re = /(((\w|\d){3}\s(\w|\d){3}:(\w|\d){3}\s(\w|\d){3})|(\d{5}:\d{5}))/;
var re = /((\w{3}\s\w{3}:\w{3}\s\w{3})|(\d{5}:\d{5}))/;
alert(re.test(s1));
alert(re.test(s2));
于 2013-10-13T02:48:32.647 に答える
0

単純にトークンを分割して長さを比較できます。

var range = "123:567";

var tokens = range.split(":");

var valid = tokens[0].length === tokens[1].length;
于 2013-10-13T02:30:07.900 に答える
0
function compareValues(str){

    var str_array = str.split(':');

    return (str_array[0].length===str_array[1].length);
}


alert(compareValues('A9A 9AA:A9A 9ZZ'));
alert(compareValues('85001:255'));

jsfiddle : http://jsfiddle.net/EU7uB/4/

于 2013-10-13T02:34:45.050 に答える
0

コロンの両側でキャプチャ括弧を使用して、それらの長さが等しいかどうかをテストできます。

var myString = "85001:85255";
var myRegexp = /^([\w][\w\s]+):([\w][\w\s]+)$/; 
var match = myRegexp.exec(myString);

if (match[1].length === match[2].length) { 
    alert("There is a match!")
}
else { 
    alert("Not a match")
}
//There is a match!
于 2013-10-13T02:35:00.750 に答える