2009-08-04 92 views
-1

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

  1. 如果给出了地址polo Rd,它会在polo中标识“po”并提醒错误消息。

所以,我们应该帧的新验证,因而不应该接受的地址线与价值观:

  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"应被接受为两个地址行中的有效地址。

现在在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

嗨可以任何一个FX呢?请 – raj 2009-08-05 04:53:12

回答

0

你的问题的解决方案是,需要导入初始P.O匹配后的空白。这样你就不会匹配以Po-开头的地址。然后,您还需要使用BOX或BIN箱来覆盖箱子。

试试沿着这些线路:

/^ \ s *((P(OST)\ S * O(FF(ICE))\ S +(B(IN????? | OX))?)| B(IN | OX))/ i

有很多很好的工具可以使正则表达式的设计更容易一览。一个这样的工具,你可以在网上找到RegExr

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; 
}