与this topic类似。
我正在尝试使用以下限制验证用户名:
编辑:
被困了一会儿。我是regex的新手。
答案 0 :(得分:14)
作为Mark答案的优化:
^(?=.{3,15}$)([A-Za-z0-9][._()\[\]-]?)*$
说明:
(?=.{3,15}$) Must be 3-15 characters in the string
([A-Za-z0-9][._()\[\]-]?)* The string is a sequence of alphanumerics,
each of which may be followed by a symbol
这个允许使用Unicode字母数字:
^(?=.{3,15}$)((\p{L}|\p{N})[._()\[\]-]?)*$
这是Unicode变体,另外还使用非捕获组:
^(?=.{3,15}$)(?:(?:\p{L}|\p{N})[._()\[\]-]?)*$
答案 1 :(得分:12)
在单个正则表达式中表达一组不相关的规则并不是那么干净,但可以通过使用外观断言(Rubular)来完成:
@"^(?=[A-Za-z0-9])(?!.*[._()\[\]-]{2})[A-Za-z0-9._()\[\]-]{3,15}$"
说明:
(?=[A-Za-z0-9]) Must start with a letter or number (?!.*[._()\[\]-]{2}) Cannot contain two consecutive symbols [A-Za-z0-9._()\[\]-]{3,15} Must consist of between 3 to 15 allowed characters
您可能想要考虑这是否更易于阅读,并且作为简单正则表达式的列表更易于维护,所有这些都必须成功验证,或者将其写入普通的C#代码中。