regulareexpression validator的行为与UnitTest RegEx不同
本文关键字:UnitTest RegEx 不同 validator regulareexpression | 更新日期: 2023-09-27 18:14:54
我为我们的需要创建了一个RegEx -写了我的UnitTest,在它通过后,我想升级我的FrontEnd到新的RegEx -但是RequiredFieldValidator不知怎么的不匹配与UnitTest完全相同的字符串
下面是Unittest可以顺利通过的例子:
[TestMethod]
public void BasicTest()
{
using (ShimsContext.Create())
{
var basicUnicodeRegEx = new Regex(@"^(?:(?:'p{IsBasicLatin}|'p{IsLatin-1Supplement}|'p{IsLatinExtended-A}|'p{IsLatinExtended-B}|'p{IsIPAExtensions}|['u0302'u030C]|'p{IsLatinExtendedAdditional}){2,}[*]?)$");
var isMatchString = "Floriân-D̂îétrich Wäßterh@gen 1823*";
var IsNotMatchString = "べξぺき";
Assert.IsTrue(basicUnicodeRegEx.IsMatch(isMatchString));
Assert.IsFalse(basicUnicodeRegEx.IsMatch(IsNotMatchString));
}
}
这是我的ASP控件它不喜欢完全相同的字符串甚至不喜欢基本的a - z字符串:
<asp:TextBox runat="server" ID="edtNachname"></asp:TextBox>
<asp:RegularExpressionValidator ID="rev_Nachname" runat="server" ControlToValidate="edtNachname" ErrorMessage="nope" ValidationExpression="^(?:(?:'p{IsBasicLatin}|'p{IsLatin-1Supplement}|'p{IsLatinExtended-A}|'p{IsLatinExtended-B}|'p{IsIPAExtensions}|['u0302'u030C]|'p{IsLatinExtendedAdditional}){2,}[*]?)$">
</asp:RegularExpressionValidator>
这是怎么回事?: o
似乎RegularExpressionValidator不支持NamedBlocks (ref: https://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx#SupportedNamedBlocks)
更改为UniCode范围-在这种情况下:
^(?:['u0000-'u02AF]|['u0302'u030C]|['u1E00-'u1EFF]){2,}$
-工作正常
有两个重要的区别:
- 验证器使用javascript在浏览器中进行验证-因此您受到javascript中的正则表达式引擎的限制。
- 验证器仅在整个字符串匹配时才匹配,就好像模式被
^
和$
包围一样。
'p{IsBasicLatin}
,我怀疑第一点是你的问题。您可以将该验证设置为仅在服务器端使用. net正则表达式引擎,但这确实需要回发。