正则表达式匹配没有尾随/前导空格+最小/最大长度的任何字符

Regex to match any character without trailing / leading whitespace + min / max length

我尝试找出如何通过 preg_match 使用以下值来匹配以下值:

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

不幸的是,最小值从 4 开始起作用,而最大值 10 被完全忽略,因为该模式仍然在 11 的长度上运行。

  1. 不允许前导和尾随 spaces
  2. 允许里面的任何字符
  3. 字符内允许space
  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
    ]
]

感谢您在高级阶段的帮助

您可以使用

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

regex demo

详情

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