带有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....-
就像Kirill说的,用ErrorMessage代替Text。
-
但主要的问题是,我认为,你的本地化,这是通过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应用程序")。
- 同意其他人的观点,你确实应该检查你的资源文件。