0

I have a function from another thread that helps to detect POBoxes, but it doesn't quite work as intended.

function isPOBox(v){
    var r = new RegExp('[PDO.]*\\s?B(ox)?.*\\d+', 'i');
    return v.match(r);
}

If I have the value 'Lvl 1 TowerB, 999 C G Road' it incorrectly picks it up as a PObox.
As you can see, there's no P in the above.

How would I go about editing the regex to be more specific around POBoxes?

I have set up a demo Fiddle here: http://jsfiddle.net/xCQwM/

4

2 に答える 2

2

実際の試合を見ると:

> "Lvl 1 TowerB, 999 C G Road".match(new RegExp('[PDO.]*\\s?B(ox)?.*\\d+',"i"))
[ 'B, 999',
  undefined,
  index: 11,
  input: 'Lvl 1 TowerB, 999 C G Road' ]

それは次の理由で一致します。

  • [PDO.]\*一致の最初の部分がオプションであることを示します
  • \\s?オプションです
  • (ox)?オプションです
  • .*オプションです

正規表現に一致する文字列のセットは次のとおりです。

"B" followed by any number of characters followed by a digit

あなたの例では、一致は次のようになります

"B" matches "B"
"," matches ".*"
"999" matches "\\d+"

より良い正規表現を提供するために、私書箱がどのように見えるかについての詳細を提供する必要があります

于 2013-06-28T13:59:15.793 に答える
0

あなたが現在述べているように、あなたの質問への答えは、少なくとも1つの文字に一致[PDO.]*するように置き換えることです。[PDO.]+でも使いたくなるかもしれません([PDO]\\.){2}

私はこのようなものが良いかもしれないと考えています:

([PDO]\\.){2}\\s?B(ox|\\.)\\s?\\d+
于 2013-06-28T13:58:20.747 に答える