正则表达式长度约束

Regex length constraint

这是我当前的正则表达式。 (需要至少一个字母,数字和特殊字符。长度在8到100之间)

^(?=.*([a-zA-Z]))(?=.*\d)(?=.*(_|[^\w])).+{8,100}$

我想阻止以 space 开头或结尾的字符串。 为此,我尝试了

^(?=.*([a-zA-Z]))(?=.*\d)(?=.*(_|[^\w]))[^\s].+[^\s]{8,100}$

但是 {8, 100} 只适用于最后一个 [^\s]。 我该如何解决?

不匹配 .+{8,100}(这不是有效的正则表达式语法),而是匹配一个非 space,后跟 6 到 98 个字符,然后是另一个非 space .您可以使用 \S 代替 [^\s],类似地,\W 代替 [^\w]

^(?=.*([a-zA-Z]))(?=.*\d)(?=.*(?:_|\W))\S.{6,98}\S$
                               ^^^^^^  ^^^^^^^^^^^