【问题标题】:Regular expression error: "Invalid Regular Expression"正则表达式错误:“无效的正则表达式”
【发布时间】:2018-11-13 11:03:34
【问题描述】:

下面是我使用的正则表达式的最新版本,它抛出错误“无效的正则表达式”。

XSD:正则表达式 '^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{10,15}$' 在位置 4 验证失败:当前选项设置不支持此表达式。

我的 xsd 文件中出现此异常,我正在消息代理 (IIB) 中开发此 xsd。谁能帮我解决这个问题?

【问题讨论】:

  • 不是你的问题的答案,但你的正则表达式似乎有一些错别字,我会这样写:^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.[^0-9a-zA-Z]).{10,15}$
  • 可能是您的正则表达式不支持前瞻?

标签: regex messagebroker


【解决方案1】:

全部转义 = 符号:

如更改 = 为 \=

【讨论】:

  • 为什么?你能详细说明一下吗?
  • 使用 .之后 (?= 不被接受,它只匹配字符串。转义正则表达式中的第一个点,看看它是否仍然显示该错误。
【解决方案2】:

您似乎想查看一个字符串是否至少包含一个大写字符、一个小写字符、一个数字、一个特殊字符,以及该字符串的长度是否在 10 到 15 个字符之间。

就像@Toto 已经评论的那样,我认为你的风格不支持前瞻。您可以不使用捕获组(我从here 借用并增强了代码)并对其进行测试:

^
(?>                       #MAIN iteration (atomic only for efficiency)
    (?<upper>[A-Z])       #  an uppercase letter
  |                       # or
    (?<lower>[a-z])       #  a lowercase letter
  |                       # or
    (?<digit>[0-9])       #  a digit
  |                       # or
    (?<special>[^(0-9|a-z|A-Z)]) # a special
  |                      # or
    .                     #  anything else
){10,15}?                    #REPEATED 10 to 15 times
                          #
                          #CONDITIONS:
(?(upper)                 # 1. There must be at least 1 uppercase
    (?(lower)             #    2. If (1), there must be 1 lowercase
        (?(digit)         #       3. If (2), there must be 1 digit
            (?(special)   #           4. If (3) there must be 1 special   
              | (?!)      #          Else fail
            )             #
          | (?!)          #          Else fail
        )                 #
      | (?!)              #       Else fail
    )                     #
  | (?!)                  #    Else fail
) $                       #

你可以在这里测试:regex101 example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2021-08-03
    • 2021-06-10
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多