我目前正在运行此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。 有什么明显的原因吗?
提前致谢!
答案 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,}
,其余部分用于匹配变音符号。