【问题标题】:Regex to not allow special character without prefix or suffix正则表达式不允许没有前缀或后缀的特殊字符
【发布时间】:2020-09-30 03:27:02
【问题描述】:

我正在为以下验证字符串编写正则表达式。我写了以下正则表达式。

^[^\s]+[a-z]{0,}(?!.* {2})[ a-zA-z]{0,}$

验证

  1. 开头没有空格。
  2. 不允许有两个连续的空格。
  3. 问题是它允许单个特殊字符。它不应允许使用特殊字符,除非它带有字母数字字符的后缀或前缀。

例子:

# -> 不允许。

#AA#A23A 是允许的。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    一种选择是断言字符串不包含单个“特殊”字符或使用否定前瞻的两个相邻的特殊字符。

    ^(?!.*[^a-zA-Z0-9\s][^a-zA-Z0-9\s])(?!.*(?:^| )[^a-zA-Z0-9\s](?!\S))\S+(?: \S+)*$
    

    说明

    • ^ 字符串开始
    • (?!负前瞻,断言右边的内容不包含
      • .*[^a-zA-Z0-9\s][^a-zA-Z0-9\s] 匹配除 a-zA-Z0-9 以外的 2 个字符或彼此相邻的空白字符
    • ) 关闭前瞻
    • (?! 负前瞻,断言右边的内容不包含
      • .*(?:^| )[^a-zA-Z0-9\s](?!\S) 匹配除 a-zA-Z0-9 或空白字符以外的单个字符
    • ) 关闭前瞻
    • \S+(?: \S+)* 匹配 1+ 个非空白字符并可选择重复一个空格和 1+ 个非空白字符
    • $字符串结束

    Regex demo

    【讨论】:

    • 这看起来不错。但现在我的问题是这无法同时验证 2 个特殊字符。例如。 ##A, A## 有效。
    • @vijaysingh 你能举个例子在这种情况下你做什么和不想匹配吗?
    • # 单独或 ## 无效,但 #A 或 ##A 有效。同样。
    • @vijaysingh 你是这个意思吗? ^(?!.*(?:^| )[^a-zA-Z0-9\s]+(?!\S))\S+(?: \S+)*$regex101.com/r/RtuIFF/1
    【解决方案2】:

    请省略正则表达式中的“$”符号,因为它代表句子的结尾。

    ^[^\s]+[a-z]{0,}(?!.* {2})[ a-zA-z]{0,}
    

    因此,当将上述正则表达式应用于以下内容时,它只会找到'#'。

    #A A# A2 3A

    【讨论】:

    • 它不适用于单个特殊字符。例如:# 是有效的。不应该。
    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2017-08-15
    相关资源
    最近更新 更多