2016-07-06 20 views
0

我有一個P.O. Box正則表達式運行良好,但客戶已經遇到需要領先'#'的情況。允許在P.O中領先'#'盒正則表達式(JavaScript)

這裏是我的正則表達式:

#1-322 Brooke Street 

我怎樣才能讓地址像這些我目前正則表達式設置:

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) 

這是造成驗證失敗的格式像這樣的例子地址?

我已經用Angular構建了一個plunker。在框中輸入一些文本,驗證器將適當地從真變爲假。

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

+0

如果正則表達式的關鍵在於驗證,如果文本*匹配*,那麼你的plunker例如在邏輯上是倒退。我可以驗證「Little Bo Peep」是一個字符串。 – JayC

回答

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