【发布时间】: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