【问题标题】:Excluding PO Box Addresses using the pattern attribute使用模式属性排除邮政信箱地址
【发布时间】:2016-12-12 12:05:03
【问题描述】:

首先,我知道这里已经有一些关于排除邮政信箱地址的线程,但似乎他们中的大多数使用 Jquery 并且我尝试在我的平台 (prestashop) 中复制它们并没有成功为了我。虽然这可能是我在所有其他方法都失败时采用的解决方案,但我希望尽可能使用模式输入属性。

我有一个希望在模式属性中使用的正则表达式,但是我对正则表达式不太熟悉。事实上,我最近才遇到它们。

我希望根据是否输入了邮政信箱地址来验证表单。如果有,则表单将不会提交。在做了一些研究之后,我遇到了以下表达式,据说它可以满足我的需求:

^ *((#\d+)|((box|bin)[-. \/\\]?\d+)|(.*p[ \.]? ?(o|0)[-. \/\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?\/?(o)? *-?box)|post office (box|bin)|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)

这个表达式对于我的理解来说太复杂了,但是在 Regex101 中查看它似乎与我正在寻找的相反,我可能会误解,但它似乎正在验证邮政信箱并排除其他所有内容。不管怎样,我在我的表单上尝试过它,但它似乎使它无论输入什么都不会被排除在外。

这让我相信要么我做错了什么,要么模式输入字段不支持如此复杂的表达式,或者如果支持,它需要使用不同的语法。

我希望能对此事进行一些澄清,并推荐在验证我的表单时采取的步骤。

模式输入属性是否支持这种类型的表达式,如果不支持,我应该如何使用它来验证我的表单?

为了澄清起见,这个表达式是验证邮政信箱还是排除它们,如果它验证了它们,我将如何改变它来做相反的事情?

这是我目前正在使用的代码:

<label for="return-street-address">Street Address <span class="asterisk">*</span></label> <input type="text" value="" name="ADDRESS" required id="return-street-address" "^(?! *(#\d+|(box|bin)[-. /\\]?\d+|.*p[ .]? ?[o0][-. /\\]? *-?((box|bin)|b|(#|num)?\d+)|p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+|p *-?/?o? *-?box|post office (box|bin)|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)).*"> 

这些:

PO Box 123
P.O. BOX 123

不应使用此代码进行验证。

【问题讨论】:

  • 这意味着你需要像this这样的东西?
  • 感谢 Wiktor,但那里似乎没有任何东西。
  • 重新点击链接查看^(?! *(#\d+|(box|bin)[-. /\\]?\d+|.*p[ .]? ?[o0][-. /\\]? *-?((box|bin)|b|(#|num)?\d+)|p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+|p *-?/?o? *-?box|post office (box|bin)|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)).*演示。另请参阅jsfiddle.net/nfw3ogy2
  • 不幸的是似乎不起作用,现在它似乎只是让地址和邮政信箱都验证。
  • 请分享您的代码,并提供您测试的示例。

标签: regex forms validation input


【解决方案1】:

如果你想使用你找到的模式,你需要删除字符类中不必要的转义,并将每个字母替换为一个字符类,包括字母的小写和大写变体(这是必要的,因为不能通过带有 HTML5 模式的正则表达式修饰符)。

使用

input:valid {
  color: black;
}
input:invalid {
  color: red;
}
&lt;label for="return-street-address"&gt;Street Address &lt;span class="asterisk"&gt;*&lt;/span&gt;&lt;/label&gt; &lt;input type="text" value="" name="ADDRESS" required id="return-street-address" pattern="^(?! *(#\d+|([bB][oO][Xx]|[Bb][Ii][Nn])[-. /\\]?\d+|.*[pP][ .]? ?[Oo0][-. /\\]? *-?(([bB][oO][Xx]|[Bb][Ii][Nn])|b|(#|[Nn][Uu][Mm])?\d+)|[Pp]([Oo][Ss][Tt])? *([Oo]([Ff]{2}([Ii][Cc][Ee])?)?)? *(([bB][oO][Xx]|[Bb][Ii][Nn])|b)? *\d+|[Pp] *-?/?[Oo]? *-?[bB][oO][Xx]|[Pp][Oo][Ss][Tt] [Oo][Ff][Ff][Ii][Cc][Ee] ([bB][oO][Xx]|[Bb][Ii][Nn])|(([bB][oO][Xx]|[Bb][Ii][Nn])|[Bb]) *([Nn][Uu][Mm][Bb][Ee][Rr]|[Nn][Uu][Mm]|#)? *\d+|([Nn][Uu][Mm][Bb][Ee][Rr]|[Nn][Uu][Mm]|#) *\d+)).*"&gt; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多