我目前正在运行此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-Latin的要求,并为PHP创建了RegEx:
^[\p{Latin}+\p{M}*+0-9'-]{2,}
更改了正则表达式并部署了相关站点后-如果我打开更改了正则表达式的站点,应用程序将立即超时-如果撤消所做的更改,一切都会正常。
由于我没有收到任何错误,因此我有点茫然-但是认为ASP无法处理我的RegEx。有什么明显的原因为什么不起作用?
提前致谢!
您似乎希望允许名称中包含拉丁语的所有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-]
。
但是,您当前的正则表达式仅匹配string的开头,^
您的自定义字符类([...]{2}
部分)中的2个字符,以及除换行符(.*
)以外的任何0+字符。扩展版本看起来像
^[\u0000-\u007F\u0080-\u00FF\u0100-\u017F\u0180-024F\u1E00-\u1EFF'0-9-]{2}.*
如果您需要允许自定义字符类中的两个或多个符号,请使用
^[\u0000-\u007F\u0080-\u00FF\u0100-\u017F\u0180-024F\u1E00-\u1EFF'0-9-]{2,}$
更新:
因此,事实证明,您需要从BMP平面之外支持变音符号,并且特定的Unicode代码点范围不包括其中的一些。
^(?:(?:(?:(?![\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,}
这是一个正则表达式演示
模式的主要部分是(?:(?![\u0009-\u002F\u003A-\u0040])[a-zA-Z\u006E-\u0302\u006D-\u0302\u004A-\u030C'0-9-])
,其余部分用于匹配变音符号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句