Javascript 将邮政信箱的HTML5输入模式与地址特殊字符禁止组合

Javascript 将邮政信箱的HTML5输入模式与地址特殊字符禁止组合,javascript,html,regex,reactjs,Javascript,Html,Regex,Reactjs,对于地址的HTML5输入字段,我有两个单独的正则表达式模式 第一个不允许使用特殊字符和我想要应用的字符范围,并且可以自己使用: pattern="[-.0-9A-zÀ-ž ]+" 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][

对于地址的HTML5输入字段,我有两个单独的正则表达式模式

第一个不允许使用特殊字符和我想要应用的字符范围,并且可以自己使用:

pattern="[-.0-9A-zÀ-ž ]+"
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+)).*"
第二个不允许输入采购订单箱,也可以自己工作:

pattern="[-.0-9A-zÀ-ž ]+"
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+)).*"
不过,有两个问题

问题1:我似乎不知道如何将这两种模式组合成一种模式,因为在某些情况下,我需要禁止某些客户使用邮政信箱(说来话长)

问题2:这是一个React应用程序,甚至决定使用什么模式都需要JS检查。不幸的是,如果我尝试将该模式应用于JS变量,然后将其应用于输入字段,它会剥离一些字符,不再工作

例如:

const poBoxPattern = !includes(PO_BOX_ALLOWED, companyId)
    ? '^(?! *(#\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+)).*'
    : '[-.0-9A-zÀ-ž ]+';
请注意,代码只是使用了or模式(因为我不知道如何在第一条语句中组合这两种模式,但即使这样也会出现问题。我在Chrome中看到以下错误:

[bB][[b][二[[Ii][[[[[[[BBB][[BBB][[Ii][[[[[[[BBB][[BBB][oO[b][[[bB[oO][oO[[[[[[[[3]五五五五五周五周五周五周五周五周五周五\\\\\\\\\\\\355555555; d五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五[[[[[[[oO[[[[[[[[[[[[[[[[[[[oO[[[[oO[[[[oO[[[[[oO[[oO[[[[[[[[oO[[[[[[[[[[[[bB][oO][Ff][Ii][Cc][Ee]([bB][oO][Xx][bB][Ii][Nn])([bB][oO][Xx][bB][Ii][Nn])|[bB])*([Nn][Uu][UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[[[[[Mm][[[[[[[[[[[Mm][][][][][][][][][][][][][][][][][][][][][][][][[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|[Nn][Uu][Mm])?d+| pP*(oO?*([Bb][oO][Xx]|[Bb][Ii][Nn])| b)(二)(二)(二)(三)(三)(三)(三)(三)(三)(三)()(三))()()((三))))(()))((三))))(三))))(三


我对正则表达式很在行,对此有点困惑,所以我真的需要一些帮助。

对于初学者,您可能会发现模式中存在语法错误。请尝试先使用来修复这些错误。您可以忽略大小写或转换大小写,只需对照单词进行检查。如果您有不同的验证要求,那么为什么要这样做合并它们?@Nicolas模式是有效的,我从这里把它拉了出来,它起作用了:@DaveNewton,因为一个需要同时支持两个,另一个只支持一个。@重新引入这一点并不能回答问题。你有两个要求,没有理由合并它们,特别是你创建的regex怪物。