【问题标题】:Regex to match any character without trailing / leading whitespace + min / max length正则表达式匹配任何字符,没有尾随/前导空格+最小/最大长度
【发布时间】:2020-07-02 21:51:40
【问题描述】:

我试图弄清楚如何通过 preg_match 匹配以下值:

^[\S].*[\S]{3,10}$

不幸的是,最小尺寸为 4,最大尺寸 10 被完全忽略,因为该图案仍然在 11 长上切割。

  1. 不允许前导和尾随空格
  2. 允许包含任何字符
  3. 字符内允许空格
  4. 强制最小值为 3,最大值为 10(不起作用)

可用于的测试集:https://www.phpliveregex.com

[
    [
        "Test",
        true
    ],
    [
        "Test Test",
        true
    ],
    [
        "Test-Test",
        true
    ],
    [
        "Test'Test",
        true
    ],
    [
        "Test,Test",
        true
    ],
    [
        null,
        false
    ],
    [
        "   ",
        false
    ],
    [
        " Test ",
        false
    ],
    [
        "12",
        false
    ],
    [
        "12345678901",
        false
    ]
]

感谢您在高级方面的帮助

【问题讨论】:

  • 如果您的问题以一个问题的陈述开始而不参考您的正则表达式,然后是一个或多个示例,显示每个示例所需的结果,然后呈现代码,这将对读者有所帮助您已经尝试并解释了为什么它是错误的(不仅在这里,而且对于一般的 SO 问题)。
  • 使用^(?=.{4,10}$)\S.*\S$。演示:regex101.com/r/LfbLWa/1

标签: php regex preg-match


【解决方案1】:

你可以使用

^(?=.{4,10}$)\S.*\S$

regex demo

详情

  • ^ - 字符串开头
  • (?=.{4,10}$) - 除了换行符之外的四到十个字符,直到字符串的末尾允许
  • \S - 非空白字符
  • .* - 除了换行符之外,尽可能多的 0 个或更多字符
  • \S - 非空白字符
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多