正则表达式 - 匹配没有前导和尾随空格的字符串

Regex - match a string without leading and trailing spaces

构建将拒绝未修剪的输入字符串的表达式。

有一组白名单符号,包括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

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

取决于支持环顾四周的正则表达式引擎

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

Demo

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

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

Live demo

但如果环境不支持环视,则以下正则表达式适用于大多数引擎:

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