我试图编写正则表达式来检查提议的名称在游戏平台中是否有效。
规则:
我知道我可以单独检查字符串的长度,因此第一条规则是无关紧要的,但我认为我列出了它的好处。
测试用例(Pass):
测试用例(失败):
我可以用什么正则表达式来解决这个问题?期望仅使用正则表达式来执行此操作是否合理,还是需要使用不同的方法分析模式?
由于
答案 0 :(得分:1)
这是一个可能的正则表达式:
(?!.*[A-Z]{2})(?!.*[^A-Za-z][ -])(?!.* ([^A-Z]|$))(?!.*-([^a-z]|$))^[A-Z].{2,19}$
请参阅regex101.com上的演示。
一些规则可以表示为"不能包含"一种规则,它们很容易用负面预测((?! ... )
)实现:
顺序没有两个首都:
(?!.*[A-Z]{2})
没有非字母后跟空格或连字符:
(?!.*[^A-Za-z][ -])
没有后跟非大写或字符串结尾的空格($
):
(?!.* ([^A-Z]|$)
没有连字符后跟非小写字母或字符串结尾:
(?!.*-([^a-z]|$))
最后,实际匹配是这样的:大写后跟2 - 19个字符:
^[A-Z].{2,19}$