我为我们的需求创建了一个RegEx - 编写了我的UnitTest,在它通过后我想将我的FrontEnd升级到新的RegEx - 但是RequiredFieldValidator SomeHow与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>
这里发生了什么? :○
答案 0 :(得分:0)
看起来像RegularExpressionValidator并不支持NamedBlocks(参考:https://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx#SupportedNamedBlocks)
更改为UniCode范围 - 在这种情况下:
^(?:[\u0000-\u02AF]|[\u0302\u030C]|[\u1E00-\u1EFF]){2,}$
- 工作正常
答案 1 :(得分:0)
有两个重要的区别:
^
和$
包围一样。对于\p{IsBasicLatin}
,我怀疑第一点是你的问题。您可以将该验证设置为仅在服务器端工作以使用.Net正则表达式引擎,但这确实需要回发。