【问题标题】:validation pattern in ValidationExpression of asp.net webform: required at least one digitasp.net webform的ValidationExpression中的验证模式:至少需要一位数字
【发布时间】:2013-08-08 15:24:46
【问题描述】:

所以我必须验证一个只支持大小写字符的模式,并且必须有at least one digit,必须在 8 到 16 之间。

到目前为止我有

ValidationExpression="(^[A-Za-z0-9](?=.*\d){8,16})$"

这似乎不起作用,有什么提示吗?

abcdef will not work 
abcdef12 will work

【问题讨论】:

  • 你的意思是第二个字符串应该有效吗?有空格和 2 位数字而不是 1。或者您的意思是小写、大写、至少一位数字和空格?
  • 长度在 8 到 16 个字符之间也有要求吗?
  • @Michelle Yup,我也忽略了这个约束!
  • @Michelle 是的,第一次没有包含它
  • 所以它只能包含大小写字母和数字(字母数字),必须是8-16个字符,并且必须至少包含一个数字?这是正确的吗?

标签: asp.net regex validation webforms


【解决方案1】:

问题:

(^[A-Za-z0-9](?=.*\d){8,16})$

这是在您的字符串中寻找匹配项:
- 包含[A-Za-z0-9]
中的单个项目 - 具有 .*\d 的前瞻,前瞻 hapening8-16 次。

可能的解决方案:

{8,16}放在[A-Za-z0-9]而不是前瞻上,然后将前瞻移到前面:

^(?=.*\d)[A-Za-z0-9]{8,16}$

另外,如果您希望每个大写和小写字母中至少有一个,您可以这样做:

^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])[A-Za-z0-9]{8,16})$

【讨论】:

  • 如果字符串以数字开头,第一个条件是否仍然匹配? .* 将不匹配任何内容,然后 \d 将匹配第一个字符,不是吗?
  • @smerny:是的,我想知道 (?:(?=.*\d) 或 (?:(?=\d.*) 之间有什么区别
  • @Michelle - 你似乎是对的,我不确定我当时在想什么,我删除了第二个
【解决方案2】:

我会分别检查要求和约束。所以首先,你要检查输入是字母数字和正确的长度:

ConstraintsExpression="^([A-Za-z\d]){8,16}$"

然后,检查是否至少有一个数字:

RequirementsExpression="\d"

第二个正则表达式中没有^$,因为您希望能够在输入中的任何位置找到它。如果完全匹配,则至少有一个数字。

【讨论】:

    【解决方案3】:

    如果你的意思是字符串应该只有大写字母、小写字母和至少一个数字,最后在所需长度之间,我建议使用这个正则表达式:

    ^(?=.*[0-9])[A-Za-z0-9]{8,16}$
    

    如果是密码,我不知道为什么它应该只有字母数字字符。添加符号使密码更强大!

    要允许任何字符,同时确保至少有一个数字,一个小写和一个大写,你可以使用这个:

    ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}$
    

    将允许创建像P@$5W0rd 这样的密码。

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2017-07-05
      • 2015-06-11
      • 2017-06-02
      相关资源
      最近更新 更多