允许领导'#'在P.O. Box Regex(JavaScript)

时间:2016-07-06 15:35:05

标签: javascript angularjs regex

我有一个P.O. Box regex工作得很好,但是客户遇到了他们需要一个领先的#'。

这是我的正则表达式:

text.search(/^ *((#\d+)|((box|bin)[-. \/\\]?\d+)|(.*p[ \.]? ?(o|0)[-. \/\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)/i)

导致验证程序失败的示例地址的格式如下:

#1-322 Brooke Street

如何使用当前的正则表达式设置允许这些地址?

我已经用Angular建了一个plunker。在框中输入一些文本,验证器将适当地从true变为false。

http://plnkr.co/edit/fpLmZQhRryBC3Z3ArZwV?p=preview

1 个答案:

答案 0 :(得分:0)

尝试这样在开头接受单个#作为有效值。

$scope.validateText = function () {
    if ($scope.text.search(/^ *((?#\d+)|((box|bin)[-. \/\\]?\d+)|(.*p[ \.]? ?(o|0)[-. \/\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)/i) !== -1) {
    $scope.valid = false;
    } else {
    $scope.valid = true; 
    }
}

Plunker:http://plnkr.co/edit/i5f3vbGWB6SQ0bVRxGNV?p=preview