我想驗證郵政編碼範圍使用JavaScript和框架,提供國家特定驗證規則的方法使用正則表達式。Javascript正則表達式匹配值範圍兩側的值的長度
如果範圍分隔符(在本例中爲冒號)兩側的字符數是相同的,是否有驗證方法(使用正則表達式匹配/測試/任何其他js正則表達式函數)?
例如 85001:85255
或A9A 9AA:A9A 9ZZ
是有效的(兩側具有相同的字符數)
然而, 85001:255
或A9A 9AA:9ZZ
是無效的(不同數目的在x個字對y爲x的:Y)
由於
我想驗證郵政編碼範圍使用JavaScript和框架,提供國家特定驗證規則的方法使用正則表達式。Javascript正則表達式匹配值範圍兩側的值的長度
如果範圍分隔符(在本例中爲冒號)兩側的字符數是相同的,是否有驗證方法(使用正則表達式匹配/測試/任何其他js正則表達式函數)?
例如 85001:85255
或A9A 9AA:A9A 9ZZ
是有效的(兩側具有相同的字符數)
然而, 85001:255
或A9A 9AA:9ZZ
是無效的(不同數目的在x個字對y爲x的:Y)
由於
正則表達式的一個範例是他們無法計數。
但是,如果您知道一側的字符數量的最大長度,則可以像這樣「破解它」。假設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);
您可以簡單地拆分令牌並比較長度:
var range = "123:567";
var tokens = range.split(":");
var valid = tokens[0].length === tokens[1].length;
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/
您可以在冒號的兩側使用捕獲圓括號,然後測試其長度是否相等。
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!
這裏有點不太詳細的版本正則表達式的通過@ tak3r
var r = /^(.{1}:.{1}|.{2}:.{2}|.{3}:.{3}|.{4}:.{4}|.{5}:.{5}|.{6}:.{6}|.{7}:.{7})$/
只是一個額外的想法profided,鑑於你的兩個郵政編碼:
var s1 = "85001:85255";
var s2 = "A9A 9AA:A9A 9ZZ";
此正則表達式將測試在冒號前後5位數字的模式,字母或數字後跟空格的OR 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));
您應該使用開始/結束錨而不是字邊界,因爲使用'\ b'會給出'A9A 9AA:9ZZ'的給定示例的誤報。 – Wiseguy