java - 仅使用正则表达式匹配大小写字母
问题描述
我得到一个字符串(名称),它应该检查以下内容:
- 2 到 30 个字符之间
- 名称只能包含字母和空格
- 每个作品的第一个字符应为大写
- 每个单词用空格隔开
- 名称不能以空格开头或结尾
- 不允许使用特殊字符
这是我的正则表达式字符串:"[[[A-Z]{1}[a-zA-Z]*[\\s]?+]{2,30}[^\\s]"
“Roger Federer”应该是有效的,这说它是“Roger Federer”不应该是有效的,但我说它是“Roger Federer $”应该是无效的,但我说它是
我很好奇我是否执行了这些错误,我对正则表达式很陌生
解决方案
您可以使用
^(?=.{2,30}$)\p{Lu}\p{L}*(?:\s\p{Lu}\p{L}*)*$
如果您想在单词之间允许一个或多个+
空格,请添加after \s
。
请参阅正则表达式演示。
在 Java 中,正则表达式声明看起来像
s.matches("(?=.{2,30}$)\\p{Lu}\\p{L}*(?:\\s\\p{Lu}\\p{L}*)*")
模式匹配
^
- (隐含在matches
) - 字符串的开头(?=.{2,30}$)
- 整个字符串需要 2 到 30 个字符\p{Lu}\p{L}*
- 一个大写字母后跟零个或多个字母(?:\s\p{Lu}\p{L}*)*
- 零个或多个空格,然后是大写字母,然后是零个或多个字母$
- (隐含在matches
) - 字符串结束。
如果您只想匹配 ASCII 字母,请替换\p{Lu}
为[A-Z]
和。\p{L}
[A-Za-z]
推荐阅读
- aggregate - 在 Traefik 中聚合两个 API 的结果
- workbox - Workbox-webpack-plugin nested urls sw registration
- visual-studio - 构建 Xamarin 移动应用程序时出现未知的 MSBuild 失败
- python - HttpResponseMessage 在 .NET 中返回 403
- python - 2D 列表 python 无法正确处理
- c# - 将 SmartEnum 与 NSwag 一起使用
- c# - 显示输入类型编号但模型属性字符串的剃刀视图的验证消息
- c++ - 如何创建和调用与其他函数同名的函数?
- node.js - 使用 SSL 和 Cloudflare 的 NodeJs 应用程序变慢
- excel - 尝试使用 if 语句来获取单元格中的 exordium right bij 文本