【问题标题】:RegEx for name validation in c#用于 c# 中名称验证的正则表达式
【发布时间】:2022-01-13 17:48:25
【问题描述】:

在构建应该遵循的 RegEx 时请求您的帮助

  • 应以字母数字字符开头和结尾
  • 至少应为 1 个字符
  • 不应以给定的特殊字符 (-_',.) 开始/结束
  • 单词之间应包含 (-_',.)

我一直在使用下面的正则表达式

^[a-zA-Z0-9][a-zA-Z0-9.,'\-_ ]*[a-zA-Z0-9]$

它似乎工作正常,除了它至少需要 2 个字符,但我的要求是名称也可以是 1 个字符,在这种情况下,它不应该是任何给定的特殊字符 (-_',.)

对此的任何帮助将不胜感激,在此先感谢。

【问题讨论】:

  • 使用否定前瞻断言:^[a-zA-Z0-9](?!.*[-_',.]$)[\w.,' -]*$
  • 从逻辑上讲,满足规则 1 和 4 的最小可能长度是 3 个字符,因为规则 4 中的特殊字符不是字母数字。没有办法让一个字符串以字母数字字符开头和结尾,但中间还包含一个特殊的(非字母数字)。世界应该shall 而不是may

标签: c# regex


【解决方案1】:

您可以将第二个和第三个字符类包装在一个可选的非捕获组中

^[a-zA-Z0-9](?:[a-zA-Z0-9.,'_ -]*[a-zA-Z0-9])?$

Regex demo

【讨论】:

  • 感谢您的回复,它似乎工作正常,我正在测试,如果有什么会在这里更新。
【解决方案2】:

这将匹配所有条件:

^\w{1,2}$|^\w+(['\-_]+\w*)+\w+$

首先我们处理 1-char 和 2-char 字符串的边缘情况,它们只能包含字母数字字符 (\w)。

第二部分匹配所有以字母数字字符开头、至少包含一个特殊字符且以字母数字字符结尾的字符串。 (['\-_]+\w*) 块匹配字符串中多个不一定连续的特殊字符(例如a-a-a-a-a-a---aa

【讨论】: