RegEx Validator的文本不起作用

时间:2011-07-11 18:53:23

标签: c# asp.net regex validation

我遇到以下文字显示问题:

<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不同,该文本最初有一些内容。我已经改变了正则表达式并且可以正常工作,但是当我在Text中写一些东西时它在页面上没有更新。我重新启动了IIS,清除了IE chache ......我能想到的一切。旧文本保持显示(即“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”属性,它是否以某种方式工作,它缓存文本或什么?我没有想法......

3 个答案:

答案 0 :(得分:0)

  • 尝试使用RegularExpressionValidator.ErrorMessage而不是Text。
  • 尝试重启VS.有时,令人难以置信的错误消失了。
  • 尝试删除并重新生成..aspx.designer.cs文件(至 重新生成右键单击aspx / ascx文件并选择“转换为Web” 申请“)。
  • 与他人同意,您确实应该检查您的资源文件。

答案 1 :(得分:0)

  1. 像Kirill所说,使用ErrorMessage代替Text。

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

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

答案 2 :(得分:0)

问题的根源有很多可能性,并且没有足够的信息来判断它是哪一个。听起来像其中一个:

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

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

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}$
这是你的意图吗?我看到你要使用密码规则,但是简化它们可能更容易,并且需要一个大写,一个小写,一个数字和一个特殊字符。您还可以尝试使用更简单的正则表达式模式进行验证,然后在其他一切正常工作后添加复杂性。