我有以下正则表达式,我很难排除某些字符。我想从字符串中排除£%&+¬¦éúíóáÉÚÍÓÁ
。
\S*(?=\S{7,30})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*
我试过以下没有运气:
/\S*(?=\S{7,30})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])(?=[^£%&+¬¦éúíóáÉÚÍÓÁ])\S*/
任何建议或指示都会很棒,谢谢。
答案 0 :(得分:1)
您必须尝试匹配没有指定字母的字符串。你需要锚定你的前瞻,只有这样才能达到你所需要的水平。
^(?!\S*[£%&+¬¦éúíóáÉÚÍÓÁ])(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)\S{7,30}$
^^^^^^^^^^^^^^^^^^^^^^^^
请参阅demo
所有前瞻检查开头的字符串,长度检查可以移动到结尾。您需要^
和$
两个锚来启用长度检查。
如果您在较大字符串中匹配字,则can replace ^
and $
with word boundary \b
:
\b(?!\S*[£%&+¬¦éúíóáÉÚÍÓÁ])(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)\S{7,30}\b
或外观(如果这些不是单词,而是一些符号序列):
(?<!\S)(?!\S*[£%&+¬¦éúíóáÉÚÍÓÁ])(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)\S{7,30}(?!\S)
请参阅another demo
答案 1 :(得分:1)
您的正则表达式匹配这些字符,因为\S
匹配除空白之外的任何字符。您只需要排除这些字符。
[^\s£%&+¬¦éúíóáÉÚÍÓÁ]
是negated character class。它匹配任何字符,除了空格或您不想要的字符。只需替换模式中\S
的每个出现位置:
[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*(?=[^\s£%&+¬¦éúíóáÉÚÍÓÁ]{7,30})(?=[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*[a-z])(?=[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*[A-Z])(?=[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*[\d])[^\s£%&+¬¦éúíóáÉÚÍÓÁ]*
现在,我不确定你用这种模式尝试实现的目标。也许你可以详细说明你想要匹配的内容,以便稍微改进一下。