【问题标题】:Input field validation constraints using regular expression使用正则表达式的输入字段验证约束
【发布时间】:2016-06-02 08:37:15
【问题描述】:

我正在做一个 symfony(2.8) 项目。在注册表单中需要一些输入验证的地方。 我需要在子域名输入字段上设置以下约束: 1. 应该只包含字母数字字符 2.第一个字符不能是数字 3. 没有空格

我正在为此任务使用注释。 这是我正在使用的断言语句:

@Assert\Regex(pattern="/^[a-zA-Z][a-zA-Z0-9]\s+$/", message="Subdomain name must start with a letter and can only have alphanumeric characters with no spaces", groups={"registration"})

当我输入任何简单的单词串时,例如。 svits,它仍然显示错误消息“子域名必须以字母开头,并且只能有字母数字字符,不能有空格” 任何建议将不胜感激。

【问题讨论】:

  • 使用pattern="/^[a-zA-Z][a-zA-Z0-9]*$/"\s+ 匹配 1+ 个空格,为什么要添加您要禁止的内容?
  • 我是新手,但无论如何谢谢wiktor :)
  • 你要接受1个字母的单词吗?
  • 现在我正在考虑它o_O
  • :) 在末尾使用* 允许0 个或更多字符(和1 个字母单词),或者Toto 的+ 只允许2 个或更多字母单词。

标签: php regex validation symfony annotations


【解决方案1】:

您的正则表达式非常接近,只需添加量词并删除\s

/^[a-zA-Z][a-zA-Z0-9]+$/

【讨论】:

    【解决方案2】:

    您的模式不起作用,因为:

    • [a-zA-Z0-9] 仅匹配 1 个字母数字字符。要匹配 0 个或多个,请添加 * 量词(*零次或多次出现的量化子模式)或 +(如 Toto 的答案)以匹配 一次或多次出现(仅匹配2+ 字母单词)。

    • 由于您的第三个要求禁止在输入字符串中使用空格,请从您的模式中删除 \s+,因为它要求字符串末尾有 1 个或多个空格符号。

    所以,我的建议是

    pattern="/^[a-zA-Z][a-zA-Z0-9]*$/"
                                  ^
    

    将 1+ 个字母的单词匹配为以字母开头且后跟 0+ 个任何字母数字符号的完整字符串。

    若要在字符串的除开头以外的任何位置使用空格,请将\s 放入第二个[...](字符类):

    pattern="/^[a-zA-Z][a-zA-Z0-9\s]*$/"
                                 ^^ ^
    

    如果您不想最后允许超过 1 个空格(没有 2 个以上连续的空格),请使用

    pattern="/^[a-zA-Z][a-zA-Z0-9]*(?:\s[a-zA-Z0-9]+)*$/"
                                   ^^^^^^^^^^^^^^^^^^^
    

    (?:\s[a-zA-Z0-9]+)* 将匹配 0+ 个单个空格的序列,后跟 1+ 个字母数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多