我需要在C#中使用
Regex在以下条件下匹配字符串:
>整个字符串只能是字母数字(包括空格).
>最多不超过15个字符(包括空格).
>第一&最后一个字符只能是一个字母.
>单个空格可以在任何地方多次出现,但字符串的第一个和最后一个字符. (不应允许多个空格在一起).
>应忽略资本化.
>应匹配整个单词.
如果这些先决条件中的任何一个被破坏,则不应该进行匹配.
这是我目前拥有的:
^\b([A-z]{1})(([A-z0-9 ])*([A-z]{1}))?\b$
以下是一些应该匹配的测试字符串:
> Stack OverFlow
>我最大的
> A.
>超人23
>一二三
还有一些不应该匹配(注意空格):
> Stack [double_space]溢出岩石
> 23你好
> ThisIsOver15CharactersLong
>你好23
> [space_here]嘿
等等
任何建议将不胜感激.
解决方法
你应该使用前瞻
|->matches if all the lookaheads are true -- ^(?=[a-zA-Z]([a-zA-Z\d\s]+[a-zA-Z])?$)(?=.{1,15}$)(?!.*\s{2,}).*$ -------------------------------------- ---------- ---------- | | |->checks if there are no two or more space occuring | |->checks if the string is between 1 to 15 chars |->checks if the string starts with alphabet followed by 1 to many requireds chars and that ends with a char that is not space
你可以尝试here