javascript正则表达式与邮政编码无法正常工作

时间:2014-03-30 14:56:37

标签: javascript regex angularjs

'^[AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]{1}\d{1}[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]{1}[ -]*\d{1}[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]{1}\d{1}$'

上面的正则表达式接受来自.net格式的T3K2H3或T3K-2H3等输入,但是当我通过javascript运行验证时;它不起作用。

var rxPostalCode = new RegExp('^[AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]{1}\d{1}[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]{1}[ -]*\d{1}[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]{1}\d{1}$');

var postalCode = 't3k2h3';

var matchesPostalCode = rxPostalCode.exec(postalCode);

if (matchesPostalCode == null || postalCode != matchesPostalCode[0]) {

    $scope.AccountInfoForm.PostalCode.$setValidity("pattern", false);

    $scope.showLoading = false;

    return false;
}

4 个答案:

答案 0 :(得分:0)

我相信在javascript中,您必须//代替''

如下:

/^[AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]{1}\d{1}[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]{1}[ -]*\d{1}[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]{1}\d{1}$/

您可能需要查看以下链接:

Validate email address in JavaScript?

答案 1 :(得分:0)

您有两种语法来定义正则表达式对象:

var rxPostalCode = /^[abceghj-np-tvxy]\d[abceghj-np-tv-z][ -]?\d[abceghj-np-tv-z]\d$/i;

var rxPostalCode = new RegExp('^[abceghj-np-tvxy]\\d[abceghj-np-tv-z][ -]?\\d[abceghj-np-tv-z]\\d$',  'i');

请注意,使用第二种语法时,您需要使用双反斜杠。

答案 2 :(得分:0)

尝试以下模式:

^[AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d
[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz][ -]*\d
[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]\d

删除最后的$,看看是否能解决您的问题。

我还简化了一些事情,\d{1}\d

相同

我还要将[ -]*更改为[ -]?,除非你想允许多个空格或破折号

我怀疑发生的事情是$期望行或字符串的结尾,而JavaScript可能无法正确存储VAR。看看是否删除$解决它,或者可能保留$和trim()字符串。

答案 3 :(得分:0)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

"在使用RegExp(" pattern")表示法时不要忘记转义\本因为\也是字符串中的转义字符。"

var rxPostalCode = new RegExp('^[AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]{1}\\d{1}[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]{1}[ -]*\\d{1}[AaBbCcEeFfGgHhJjKkLlMmNnPpRrSsTtVvWwXxYyZz]{1}\\d{1}$');

这应该有用,我在Chrome的控制台中进行了测试。