【问题标题】:Regex no numbers and one space between words正则表达式没有数字,单词之间有一个空格
【发布时间】:2017-03-03 19:15:29
【问题描述】:

我正在为 xml 编写正则表达式,但我很难过。谁能指出我哪里出错了?我正在尝试验证一个城市名称,我可以在其中包含大小写字母和所有特殊字符,以及单词之间的空格,开头或最后一个单词之后没有空格。不允许数字。我进行了研究,似乎无法取得任何进展。到目前为止,这是我所拥有的,非常感谢任何帮助:

^[a-zA-Z\s.\-_|\/\\@#~=%,;?!'"`():$+*\^\[\]&<>{}]*$

【问题讨论】:

  • 是否适用于 XSD 架构?
  • 它适用于 stinger.xml,我测试了以下所有建议,但它们对我不起作用。
  • 那是因为你的问题不清楚。说明正则表达式风格,提供示例输入和预期输出。

标签: regex xml


【解决方案1】:

指定补集更容易

/^[^0-9 ][^0-9]+[^0-9 ]$/

以非空格或非数字开头和结尾,中间不应包含数字。请注意,这需要至少 3 个字符作为最小长度。您可以通过一个字符对其进行定制,但会使表达式复杂化。

【讨论】:

    【解决方案2】:

    您可以使用否定字符集 [^ <characters> ] 来禁止数字和前导/尾随空格,如下所示:

    ^(?:(?! )[^0-9]*[^ 0-9])?$
    

    细分:

    • 匹配一个可选组:

      • 断言第一个字符不是空格;

      • 匹配任意数量的非数字;

      • 匹配一个也不是空格的非数字。

    演示(JavaScript):

    var re = /^(?:(?! )[^0-9]*[^ 0-9])?$/
    
    console.log(re.test(' ')) //=> false
    console.log(re.test(' city ')) //=> false
    console.log(re.test('city name')) //=> true
    console.log(re.test('')) //=> true (if this is undesirable behavior, let me know)
    console.log(re.test(' c')) //=> false

    【讨论】:

      【解决方案3】:

      您可以使用此正则表达式,正如其他人所说,使用与指定事物以外的任何事物匹配的补集集。 这适用于长度为 1 或更长的字符串,您将捕获一个额外的组,但您可以忽略它:

      ^[^\d\s]([^\d]*[^\d\s])?$/m
      

      解释:

      • ^[^\d\s] 确保字符串以与数字或任何类型的空格不匹配的内容开头。

      • ([^\d]*[^\d\s])?$ 确保字符串以非数字或任何类型的空格结尾,同时使用? 确保长度为 ` 的字符串匹配!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 2013-03-06
        • 2021-01-11
        • 2021-01-06
        • 2023-03-25
        相关资源
        最近更新 更多