带有RegEx验证器的文本不工作

本文关键字:文本 工作 RegEx 验证 带有 | 更新日期: 2023-09-27 18:01:51

我有一个问题与以下文本显示:

<asp:RegularExpressionValidator ID="Password_RegularExpValidate" runat="server" 
     Text="TEST!" 
     Display="Dynamic" 
     BorderStyle="None" 
     ControlToValidate="txtNewPass" 
     ValidationExpression="(?=^.{8,255}$)((?=.*'d)(?=.*[A-Z])(?=.*[a-z])|(?=.*'d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*'d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*" 
     meta:resourcekey="Password_RegularExpValidateResource1" /></td>

模式本身是:

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

文本最初有一些东西,因为ValidationExpression是不同的。我已经改变了正则表达式,这是有效的,但当我写的东西在文本=它不会在页面上更新。我重新启动了IIS,清除了IE缓存…我能想到的一切。旧文本不断出现。当验证失败时,"TEST!"没有显示(它应该显示)。

如有任何帮助,不胜感激。

编辑:

txtnewpass:

<asp:TextBox ID="txtNewPass" runat="server" 
     TextMode="Password" 
     MaxLength="256" 
     meta:resourcekey="txtNewPassResource1"></asp:TextBox>

另外,值得注意的是,我可以从页面中删除整个表,当我重新加载页面时它就会消失。但是,当我改变文本值从控件或任何runat="server"和页面似乎没有更新的文本....

后面的代码不编辑显示的字段,验证器验证文本框中的文本并稍后使用该值。

编辑2:同样的事情发生在-
<asp:Label ID="Label1" runat="server" 
     Text="Change Password!!!!!" 
     meta:resourcekey="Label1Resource1"></asp:Label></td>

我已经添加了感叹号(!!!!!),当我刷新页面时没有显示.....

编辑3:正如我在一个评论中所指出的,如果我从页面中删除一个表并重新加载页面,该表就会消失,所以我知道页面正在正确地重新加载。runat="Server"属性,它是否以某种方式缓存文本或其他东西?I'm out of ideas....

带有RegEx验证器的文本不工作

  1. 就像Kirill说的,用ErrorMessage代替Text。

  2. 但主要的问题是,我认为,你的本地化,这是通过meta:resourcekey标签和资源处理的。下面是一个很好的解释:ASP。网元:resourcekey

如果您自动或手动设置资源本地化文件并在之后更改某些内容,例如Label Text属性,那么您也需要在资源文件中执行此操作。因为应该有你的初始值,在运行时加载

问题的根源有很多可能,但没有足够的信息来告诉我们是哪一个。对我来说,这听起来像是以下其中之一:

1)您的应用程序或页面的外部问题(可能您的ViewState没有正确设置,或者验证在PostBack之前被调用)。

2)你应该使用RegularExpressionValidator.ErrorMessage而不是Text,正如Kirill建议的那样。你说你已经改变了,但我想知道你是否重新加载了页面(你可以尝试重建应用程序或其他东西,如果它以某种方式被缓存)。

3)你的正则表达式可能没有做你认为的事情。这个模式非常长,而且看起来写得很奇怪。添加一些空白,我们发现它看起来像这样:

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

可以简化为:

^(
     (?=.*[A-Z])(?=.*['W_])(?=.*[a-z'd])
     |
     (?=.*[a-z])(?=.*'d)(?=.*([A-Z'W_]))
  ).{8,255}$

这是你想要的吗?我明白你对密码规则的看法,但简化密码,要求一个大写字母、一个小写字母、一个数字和一个特殊字符可能会更容易。您还可以尝试使用更简单的regex模式进行验证,然后在其他一切正常工作后添加复杂性。

  • 尝试使用正则表达式验证器。ErrorMessage代替Text.
  • 尝试重新启动VS.有时难以置信的错误消失之后。
  • 尝试删除并重新生成你的.aspx.designer.cs文件重新生成右键单击aspx/ascx文件,选择"转换为web应用程序")。
  • 同意其他人的观点,你确实应该检查你的资源文件。