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

标签 regex string language-agnostic

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

有一组列入白名单的符号,包括空格。但是它不能在第一个或最后一个位置使用。但是,它可以在任何数量的前导和修剪白名单符号之间使用。

具有以下表达式:

^[^\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 ]*(?<! )$

Live demo

但是,如果环境不支持环视,则以下正则表达式可在大多数引擎中使用:
^[A-Za-z0-9]+(?: +[A-Za-z0-9]+)*$

关于正则表达式-匹配字符串时不带前导和尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934328/

相关文章:

sql - 使用 ORM 还是普通 SQL?

Java SE 字符串池

math - float 学有问题吗?

math - float 学坏了吗?

regex - 使用 Select-String 时忽略字符

C - char* 模板是一种特殊类型的字符串吗?

string - 选择性编辑距离

java 正则表达式 逗号分隔的数字

R 正则表达式捕获组?

php - 当条目具有\n 时修复 LOAD DATA INFILE