将RegEx从PHP转换为Asp.Net RegularExpressionValidator

时间:2016-10-14 16:13:04

标签: php asp.net regex

我目前正在运行此RegularExpressionValidator:

<asp:RegularExpressionValidator ID="rev_Nachname" runat="server" ControlToValidate="edtNachname"
                            Display="None" ErrorMessage="$InvalidBeginOfStringNonTechnik$Nachname$2" ValidationExpression="^[a-zA-ZÆÄÜÖáâãäåæçèéêëìíîïñòóôõöøùúûüß0-9'-]{2}.*"></asp:RegularExpressionValidator>

我现在有要求将其更改为Unicode - 拉丁语并在RegEx for PHP之后创建:

^[\p{Latin}+\p{M}*+0-9'-]{2,}

更改正则表达式并部署相关网站后 - 如果我打开我更改了正则表达式的网站,应用程序将会暂停运行 - 如果我撤消我的更改,那么就可以了。

由于我没有收到任何错误,我在黑暗中有点 - 但认为ASP无法处理我的RegEx。 有什么明显的原因吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您似乎希望允许名称中包含 Latin 的所有Unicode类别。以下是他们的范围:

| Code point range  |        Block name            |
|--------------------------------------------------|
|   0000 - 007F     |    IsBasicLatin              |
|   0080 - 00FF     |    IsLatin-1Supplement       |
|   0100 - 017F     |    IsLatinExtended-A         | 
|   0180 - 024F     |    IsLatinExtended-B         |
|   1E00 - 1EFF     |    IsLatinExtendedAdditional |
|--------------------------------------------------|

因此,您可以从中创建自定义特殊类,并向其添加'0-9-以获取以前正则表达式的扩展版本:[\u0000-\u007F\u0080-\u00FF\u0100-\u017F\u0180-024F\u1E00-\u1EFF'0-9-]

但是,您当前的正则表达式仅匹配字符串^的开头,恰好来自您的自定义字符类([...]{2}部分)的2个字符,然后是除了换行符号之外的任何0 +字符({ {1}})。扩展版本看起来像

.*

如果您需要允许自定义字符类中的两个或多个符号,请使用

^[\u0000-\u007F\u0080-\u00FF\u0100-\u017F\u0180-024F\u1E00-\u1EFF'0-9-]{2}.*    

<强>更新

因此,事实证明你需要支持来自BMP平面之外的变音符号,以及特定的Unicode代码点范围,不包括其中一些。

^[\u0000-\u007F\u0080-\u00FF\u0100-\u017F\u0180-024F\u1E00-\u1EFF'0-9-]{2,}$

这是一个regex demo

模式的主要部分是^(?:(?:(?:(?![\u0009-\u002F\u003A-\u0040])[a-zA-Z\u006E-\u0302\u006D-\u0302\u004A-\u030C'0-9-])|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])){2,} ,其余部分用于匹配变音符号。