【问题标题】:Avoid leading and trailing spaces on Alphanumeric string避免字母数字字符串上的前导和尾随空格
【发布时间】:2020-08-16 01:42:33
【问题描述】:

我正在尝试验证字符串是否只有以下内容

1.数字(0-9)有效 2. 字母(A-Z、a-z)有效 3. 不允许有前导空格 4. 不允许有尾随空格 5. 可以在字段文本中输入空格(前导或尾随空格之外) 6. 允许使用以下特殊字符: 1. 下划线(_) 2. 连字符 (-) 3.逗号(,) 4. 点 (.)

以下对我有用,除了空格

/^[A-Za-z0-9][A-Za-z0-9\_\.\-\,\s]*$/g

如何避免前导空格尾随空格使用相同的Regex模式?

【问题讨论】:

  • 你的意思是这样吗? ^[A-Za-z0-9](?:[A-Za-z0-9_., -]*[A-Za-z0-9_.,-])?$ regex101.com/r/B6aKDu/1 或者更短一点的^[A-Za-z0-9](?:[\w., -]*[\w.,-])?$

标签: regex whitespace


【解决方案1】:

如果中间可以有连续的空白字符,您可以使用可选部分,其中第二个字符类重复 0 次以上,以相同的字符类结尾,不包括 \s

^[A-Za-z0-9](?:[A-Za-z0-9_.,\s-]*[A-Za-z0-9_.,-])?$

Regex demo

或者使用\w匹配单词字符:

^[A-Za-z0-9](?:[\w.,\s-]*[\w.,-])?$

请注意,\s 也可能匹配换行符。

【讨论】:

    【解决方案2】:

    前导空格可以用(?!\s)lookahead 禁止。

    尾随空格可以用(?!.*\s$)lookahead 禁止。

    ^之后将它们组合到您的模式中:

    /^(?!\s)(?!.*\s$)[A-Za-z0-9][A-Za-z0-9\_\.\-\,\s]*$/
    

    proof

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多