这是我的代码,但是我永远无法触发警报。

$(document).ready( function (){
    $("[id*='txtAddress1S']").blur(function() {
        var pattern = new RegExp('\b[P|p]*(OST|ost)*\.*\s*[O|o|0]*(ffice|FFICE)*\.*\s*[B|b][O|o|0][X|x]\b');
        if ($("[id*='txtAddress1S']").val().match(pattern)) {
            alert('We are unable to ship to a Post Office Box.\nPlease provide a different shipping address.');
        }

    });
});

最佳答案

在javascript中,您必须转义斜线:

var pattern = new RegExp('\\b[P|p]*(OST|ost)*\\.*\\s*[O|o|0]*(ffice|FFICE)*\\.*\\s*[B|b][O|o|0][X|x]\\b');

另外,您可以通过使用不区分大小写的匹配来稍微减少模式:
var pattern = new RegExp('\\b[p]*(ost)*\\.*\\s*[o|0]*(ffice)*\\.*\\s*b[o|0]x\\b', 'i');

注意:您的正则表达式还会与以下地址匹配:
  • 123 Poor Box Road
  • 哈珀Box Street 123号

  • 我建议也检查字符串中的数字。也许来自previous answer的这种模式会有所帮助:
    var pattern = new RegExp('[PO.]*\\s?B(ox)?.*\\d+', 'i');
    

    (它在拼写出来的“邮局”上不匹配,或者在数字上不能代替。但这只是一个开始。)

    09-27 00:10