我正在做一个symfony(2.8)项目。在注册表格中需要一些输入验证。我需要在子域名输入字段上设置以下约束: 1。应该只包含字母数字字符2。第一个字符不能是数字3。没有空格。
在这个任务中,我使用注释。下面是我使用的Assert语句:
@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,它仍然显示错误信息“子域名必须以字母开头,并且只能有字母数字字符,没有空格”任何建议都将不胜感激。
发布于 2016-06-02 08:38:46
您与正则表达式非常接近,只需添加量词并删除\s即可。
/^[a-zA-Z][a-zA-Z0-9]+$/发布于 2016-06-02 10:06:02
您的模式不起作用,因为:
[a-zA-Z0-9]只匹配一个字母数字字符。若要匹配0或更多,请添加*量词(*零或多个量化子模式的出现)或+ (如Toto的答案)以匹配一个或多个事件(只匹配2个+字母单词)。\s+,因为它需要字符串末尾的一个或多个空格符号。所以,我的建议是
pattern="/^[a-zA-Z][a-zA-Z0-9]*$/"
^若要将1+字母单词匹配为以字母开头的完整字符串,并可能后面跟着0+,请使用任何字母数字符号。
若要允许在字符串的任何位置使用空格(开始部分除外),请将\s放入第二个[...] (字符类):
pattern="/^[a-zA-Z][a-zA-Z0-9\s]*$/"
^^ ^如果不希望在结束时允许超过一个空格(没有2+连续空格),请使用
pattern="/^[a-zA-Z][a-zA-Z0-9]*(?:\s[a-zA-Z0-9]+)*$/"
^^^^^^^^^^^^^^^^^^^(?:\s[a-zA-Z0-9]+)*将匹配单个空格的0+序列,后面跟着1+字母数字。
https://stackoverflow.com/questions/37586672
复制相似问题