regex 正则表达式-匹配不带前导和尾随空格的字符串

l7mqbcuq  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(99)

构建一个拒绝未修剪输入字符串的表达式。
有一组白名单符号,包括 whitespace。但不能在第一个或最后一个位置使用。然而,它可以以任何量在任何前导和修剪白名单符号之间使用。
有以下表达式:

^[^\s][A-Za-z0-9\s]*[^\s]$

字符串
...但它不工作的几个原因,至少它仍然匹配在前导和尾随位置的任何非空白符号,即使它不是白名单。此外,它不会匹配单字母单词,即使它匹配的表达式。
白名单是A-Z、a-z、0-9、空白。
有效案例:

Abc132 3sdfas // everything ok


无效病例#1:

asd dsadas // leading\trailing space is exist


无效病例#2:

$das dsfds // not whitelisted symbol at the leading\trailing position


那么,如果一个空格符号不是前导或尾随符号,如何将它添加到白名单中呢?

vcirk6k6

vcirk6k61#

您可以使用lookarounds来确保两端没有空格:

^(?! )[A-Za-z0-9 ]*(?<! )$

字符串
Live demo
但是如果环境不支持lookarounds,下面的正则表达式在大多数引擎中都可以工作:

^[A-Za-z0-9]+(?: +[A-Za-z0-9]+)*$

1zmg4dgp

1zmg4dgp2#

这取决于你的正则表达式引擎是否支持look around

^(?=[A-Za-z0-9])([A-Za-z0-9\s]*)(?<=[A-Za-z0-9])$

字符串
Demo

相关问题