Php 使用正则表达式的输入字段验证约束

Php 使用正则表达式的输入字段验证约束,php,regex,validation,symfony,annotations,Php,Regex,Validation,Symfony,Annotations,我正在做一个symfony(2.8)项目。在注册表中,需要一些输入验证。 我需要在子域名输入字段上设置以下约束: 1.应仅包含字母数字字符 2.第一个字符不能是数字 3.没有空白 我正在为此任务使用注释。 下面是我正在使用的断言语句: @Assert\Regex(pattern=“/^[a-zA-Z][a-zA-Z0-9]\s+$/”,message=“子域名必须以字母开头,并且只能包含不带空格的字母数字字符”,groups={“registration”}) 当我输入任何简单的字符串(如svi

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

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

@Assert\Regex(pattern=“/^[a-zA-Z][a-zA-Z0-9]\s+$/”,message=“子域名必须以字母开头,并且只能包含不带空格的字母数字字符”,groups={“registration”})

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

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

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

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

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

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

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

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

所以,我的建议是

pattern="/^[a-zA-Z][a-zA-Z0-9]*$/"
                              ^
将1+个字母的单词作为完整字符串进行匹配,该字符串以字母开头,后面可以跟0+任何字母数字符号

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

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


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

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

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

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

所以,我的建议是

pattern="/^[a-zA-Z][a-zA-Z0-9]*$/"
                              ^
将1+个字母的单词作为完整字符串进行匹配,该字符串以字母开头,后面可以跟0+任何字母数字符号

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

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


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

使用
pattern=“/^[a-zA-Z][a-zA-Z0-9]*$/”
\s+
匹配1+个空格,为什么要添加您想要禁止的内容?我不熟悉这一点,但无论如何,谢谢您:您想接受1个字母的单词吗?现在我正在考虑它o_o:)在结尾使用
*
允许0个或更多字符(和1个字母的单词),或Toto的
+
仅允许2个或更多字母单词。使用
模式=“/^[a-zA-Z][a-zA-Z0-9]*$/”
\s+
匹配1+个空格,为什么要添加您想要禁止的内容?我对这一点很陌生,但无论如何谢谢您:您想接受1个字母的单词吗?现在我正在考虑它o_o:)在结尾使用
*
允许0个或更多字符(和1个字母的单词),或者使用Toto的
+
只允许2个或更多字母的单词。