RegEx的SWTOR名称

时间:2011-11-27 17:54:13

标签: regex

我正在尝试构建一个正则表达式来验证SWTOR角色名称。

需要遵循以下规则:

  1. 以大写字母开头
  2. 以小写字母结尾
  3. 只有第一个字母是大写,所有其他字母都是小写
  4. 长度为3-15个字符
  5. 最多可包含两个撇号(')
  6. 最多可包含一个破折号( - )
  7. 撇号不能相邻或短划线(不是“Jo''e”或“Jo'-e”)
  8. 整个名称只能包含字母,撇号和短划线。
  9. 到目前为止,这是我满足前4条规则以及5和6和8的一部分:

    ^([A-Z])([a-z'-]){1,13}([a-z])$
    

    但是我对正则表达式的了解非常有限,而且我试图弄清楚如何在撇号和破折号附近添加附加条件。

    更新:根据richardtallent的反馈/回答添加了规则#8以澄清。

1 个答案:

答案 0 :(得分:4)

好的,让我们依次采取这些:

第一个字母是大写:

^[A-Z]

否定先行断言,确保没有两个破折号,任何大写字母,两个连续的撇号,一个破折号和撇号,或者前面三个撇号:

(?!.*(-.*-|''|'-|-'|'.*'.*'|A-Z))

然后我们需要实际匹配中间字符,它们必须在1到13之间:

[a-z'-]{1,13}

最后,以小写字母匹配结束:

[a-z]$

对于完整的表达方式,只需组合各个部分:

^[A-Z](?!.*(-.*-|''|'-|-'|'.*'.*'|A-Z))[a-z'-]{1,13}[a-z]$

我假设正则表达式的.NET方言,因为你没有指定。

更新:添加了规则8和我从规则7中遗漏的部分。