regex - 正则表达式验证全名
问题描述
全名可以是 1 到 3 个单词,用空格隔开,包括以下内容:
- FirstName(允许字母和连字符
-
), - MiddleName(只允许字母)和
- 姓氏(允许字母和连字符
-
)
注意:全名不应超过 50 个字符。
有效输入:
Abc
Abc-abc abc
Abc-abc abc abc-abc
abc abc abc
无效输入:(
abc abc-abc abc
abc qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjkllz
超过 50 个字符)
我最初的正则表达式如下:
^([a-zA-Z\-]{1,50}|[a-zA-Z\-]+\s{1}[a-zA-Z\-]+|[a-zA-Z\-]+\s{1}[a-zA-Z]+\s{1}[a-zA-Z\-]+)$
我无法为 2 个和 3 个单词添加长度检查。
解决方案
如果支持,您可以使用肯定的前瞻来检查字符串是否不包含 51 个字符。
在可选组中使用可选组来匹配第二个和最后一个名字,防止第二个名字包含-
您不必在字符类末尾转义连字符。
^(?!.{51})[a-zA-Z-]+(?: [a-zA-Z]+(?: [a-zA-Z-]+)?)?$
推荐阅读
- sql - 为什么这个 Oracle 插入值语句不起作用
- alphablending - 如何使用 direct3d9、direct3d10 或 direct3d11 对保存的原始 argb 视频(图像和视频也可以)执行 alpha 混合?
- apache-kafka - kafka 消费者/生产者如何提交消息/分区?
- linux - 通过二进制或 pip install 安装 docker-compose 有什么区别
- sql - 如何仅获取解析到另一个字段的字段中的数字?
- jql - 在某个测试集中查找包含测试的测试执行
- laravel - laravel websocket客户端不起作用没有错误
- css - 无法使用 Rails 6 在生产中加载资产资源(css + js)
- c# - 为什么我不能写这个变量的值 c#
- amazon-web-services - 从 lambda 函数触发 Appsync 突变