【问题标题】:Regex to allow alpha numeric but not just numeric with minimum 6 characters and max 100正则表达式允许字母数字,但不仅仅是数字,最少 6 个字符,最多 100 个字符
【发布时间】:2019-10-19 09:02:53
【问题描述】:

最少需要 6 个字符,最多需要 100 个字符。

不允许所有数字 -111111 允许使用字母数字 - abc123 允许使用特殊字符 -_@! 只允许字母 - abcdefgh

AAAAAA =>OK
111111=> NOT OK
AAA123!=>OK
AAA12 => NOT ok minimum 6 characters 
11111_ =>OK

我尝试使用此正则表达式 ^[a-zA-Z][a-zA-Z0-9]*$.. 它可以工作,但我无法获得最小 6 或最大 100。

^[a-zA-Z][a-zA-Z0-9]*$

不允许所有数字 -111111 允许使用字母数字 - abc123 允许使用特殊字符 -_@! 只允许字母 - abcdefgh

【问题讨论】:

  • 未指定。 12343a 是否允许?是否允许 @12345 - 12345@ 怎么样 - 为什么是正则表达式?
  • "[^0-9]" 用于正则表达式,.Length >= 6 用于检查长度?
  • 我可以检查 .length 但我希望所有内容都在正则表达式中

标签: c# regex validation


【解决方案1】:

您的模式以匹配 [a-zA-Z] 开头。如果不要求 a-zA-Z 应该在开始但在整个匹配中至少 1 次,如果支持,您可以使用正向前瞻来断言 6 - 100 的长度。

那么您可以确保在左侧和右侧匹配 0+ 次 [a-zA-Z0-9_@!-]* 之间至少匹配 1 次 a-z 或 A-Z 或特殊字符:

^(?=.{6,100}$)[a-zA-Z0-9_@!-]*[a-zA-Z_@!-][a-zA-Z0-9_@!-]*$
  • ^ 字符串开始
  • (?=.{6,100}$) 断言右边是 6 - 100 个字符,换行符除外
  • [a-zA-Z0-9_@!-]* 匹配字符类中列出的 0+ 次
  • [a-zA-Z_@!-] 匹配字符 a-z 或 A-Z 或不带数字的特殊字符
  • [a-zA-Z0-9_@!-]*匹配字符类中所列内容的 0+ 倍
  • $断言字符串结束

Regex demo

另一个选项是正负前瞻,1 检查长度,另一个 (?!\d+$) 检查匹配是否仅包含数字:

^(?=.{6,100}$)(?!\d+$)[a-zA-Z0-9_@!-]+$

Regex demo

【讨论】:

  • 这不允许 11111_ =>OK
  • @user4379225 你是这个意思吗? regex101.com/r/q1JLmc/2我已经更新了答案。
【解决方案2】:

您可以定义一个范围来帮助您满足长度要求。

^[a-zA-Z][\w\d!_\-@]{5,99}$

第一个字符是强制性的,其余符号的长度为 5 到 99。

正如 Artner 先生所说,您可以详细说明您的需求,以便我们提供更好的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多