【问题标题】:Regex - match a string without leading and trailing spaces正则表达式 - 匹配没有前导和尾随空格的字符串
【发布时间】:2016-12-20 10:24:41
【问题描述】:

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

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

有如下表达式:

^[^\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

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

【问题讨论】:

  • 你能举出一些validinvalid两种情况的例子吗?
  • 尝试使用 \\s 如果有帮助,请告诉我,我遇到了同样的问题,这就是我所缺少的
  • @MaskedMan,是的,看看
  • ^[A-Za-z0-9]+(?:\s+[A-Za-z0-9]+)*$
  • ^[A-Za-z0-9]+.*[A-Za-z0-9]+$: 第一个字符应该是alphanumeric 并且至少出现一次,最后一个字符也应该相同,介于两者之间。 解决问题了吗?

标签: regex string language-agnostic


【解决方案1】:

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

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

Live demo

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

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

【讨论】:

  • 前瞻 (?!...) 和后瞻 (?
  • 你怎么能在不支持后视的火狐中做到这一点?
  • @DenisHowe 不,他们并没有走错路。您可以在 JS 中使用 ^(?! |.* $)[A-Za-z0-9 ]+$ 或查看更新。
【解决方案2】:

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

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

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多