邮箱/箱验证

时间:2009-08-04 15:46:01

标签: regex

我需要为注册页面中的地址字段提供P.O Box验证。现在我们在jquery中有一个正则表达式验证,它有一些限制如下:

  1. 如果给出地址polo Rd,它会在polo中标识“po”并发出警告错误消息。
  2. 因此,我们应该构建一个新的验证,它不应该接受带有值的地址行:

    1. "PO BOX""PO BIN""BIN""P.O BOX""P.O BIN""P.O""PO"
    2. 上述值可以是任何情况
    3. 上述词之前,之间和之后的空格也应该被找到并验证。例如:" P O 1234 "应该经过验证并发出警告错误消息。
    4. "Polo Rd""Robin Rd""testbintest"应被接受为两个地址行中的有效地址。
    5. 现在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);
      }, "");
      

2 个答案:

答案 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