首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式的输入字段验证约束

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

Stack Overflow用户
提问于 2016-06-02 08:37:15
回答 2查看 661关注 0票数 0

我正在做一个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,它仍然显示错误信息“子域名必须以字母开头,并且只能有字母数字字符,没有空格”任何建议都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-02 08:38:46

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

代码语言:javascript
复制
/^[a-zA-Z][a-zA-Z0-9]+$/
票数 2
EN

Stack Overflow用户

发布于 2016-06-02 10:06:02

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

  • [a-zA-Z0-9]只匹配一个字母数字字符。若要匹配0或更多,请添加*量词(*零或多个量化子模式的出现)或+ (如Toto的答案)以匹配一个或多个事件(只匹配2个+字母单词)。
  • 由于您的第三个需求禁止在输入字符串中使用空格,所以从您的模式中删除\s+,因为它需要字符串末尾的一个或多个空格符号。

所以,我的建议是

代码语言:javascript
复制
pattern="/^[a-zA-Z][a-zA-Z0-9]*$/"
                              ^

若要将1+字母单词匹配为以字母开头的完整字符串,并可能后面跟着0+,请使用任何字母数字符号。

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

代码语言:javascript
复制
pattern="/^[a-zA-Z][a-zA-Z0-9\s]*$/"
                             ^^ ^

如果不希望在结束时允许超过一个空格(没有2+连续空格),请使用

代码语言:javascript
复制
pattern="/^[a-zA-Z][a-zA-Z0-9]*(?:\s[a-zA-Z0-9]+)*$/"
                               ^^^^^^^^^^^^^^^^^^^

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37586672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档