我需要为注册页面中的地址字段提供P.O Box验证。现在我们在jquery中有一个正则表达式验证,它有一些限制如下:
因此,我们应该构建一个新的验证,它不应该接受带有值的地址行:
"PO BOX"
,"PO BIN"
,"BIN"
,"P.O BOX"
,"P.O BIN"
,"P.O"
,"PO"
" P O 1234 "
应该经过验证并发出警告错误消息。"Polo Rd"
,"Robin Rd"
,"testbintest"
应被接受为两个地址行中的有效地址。现在jquery验证中的代码是:
jQuery.validator.addMethod("nopobox", function(value, element) {
return this.optional(element) || ! /(P(OST)?\.?\s*O(FF(ICE)?)?\.?\s*(?<!(BOX)|(BIN)))|(^[^0-9]*((P(OST)?\.?\s*O(FF(ICE)?)?\.?)|(?<!(BOX)|(BIN))))/i.test(value);
}, "");
答案 0 :(得分:2)
/**
* The below are the possible combinations P.O.BOX, PO.BOX, P O BOX, P O B O
* X, POBOX, PO BOX, P.O.B.O.X
*
* @param input
* @return true if the input value = pobox else false
*/
public static boolean checkPoBox(String input) {
boolean poBox = false;
String inputVal = input;
try {
if (input.length() > 4) {
inputVal = inputVal.replace(".", "").replace(" ", "")
.toLowerCase();
if (inputVal.contains("pobox")
|| inputVal.equalsIgnoreCase("pobox")) {
poBox = true;
}
}
} catch (Exception e) {
log.debug("Exception from checkPoBox");
}
return poBox;
}
答案 1 :(得分:0)
问题的解决方案是在初始P.O匹配后需要一个空格。这样你就不会匹配以Po-开头的地址。然后你还需要用一个BOX或BIN平面覆盖案例。
尝试以下几点:
/ ^ \ S *((P(OST)\ S * O(FF(ICE))的 \ S + 强>(B(IN |??????OX))) | B(IN | OX))/ I
有许多很好的工具可以使正则表达式的设计更容易概述。您可以在线找到的一个此类工具是RegExr。