我希望我的域名不包含超过一个连续的(.)
或\'/\'
任何其他特殊字符。但它可以包含 IDN 字符,例如\xc3\x81, \xc5\x9b, etc..
. 我可以使用此正则表达式来满足所有要求(IDN 除外):
@"^(?:[a-zA-Z0-9][a-zA-Z0-9-_]*\\.)+[a-zA-Z0-9]{2,}$";\n
Run Code Online (Sandbox Code Playgroud)\n\n问题是这个正则表达式也拒绝 IDN 字符。我想要一个允许 IDN 字符的正则表达式。我做了很多研究,但我无法弄清楚。
\nRegex 包含一个字符类,允许您指定 Unicode 常规类别\\p{}
。MSDN正则表达式文档包含以下内容:
\n\n\n\n
\\p{ name }
匹配 Unicode 常规类别或由名称指定的命名块中的任何单个字符。
另外,作为旁注,我注意到你的正则表达式包含一个未转义的.
. 在正则表达式中,点字符.
具有任何字符的特殊含义(换行符除外,除非另有说明)。您可能需要将其更改为\\.
以确保功能正常。
编辑现有代码以包含 Unicode 字符类而不仅仅是 ASCII 字母,您应该获得以下效果:
\n\n^(?:[\\p{L}\\p{N}][\\p{L}\\p{N}-_]*.)+[\\p{L}\\p{N}]{2,}$\n
Run Code Online (Sandbox Code Playgroud)\n\n\\p{L}
表示任何语言/脚本中任何字母的 Unicode 字符类\\p{N}
代表任何语言/脚本中任何数字的 Unicode 字符类(根据您的字符示例,您可能可以保留0-9
,但我想我会向您展示一般概念并为您提供一些额外的信息)该站点提供了最常用的 Unicode 类别的快速总体概述。
\n\n\n\n\n
\n- \n
\\p{L}
或\\p{Letter}
: 来自任何语言的任何类型的字母。\n \n\n
- \n
\\p{Ll}
或\\p{Lowercase_Letter}
:具有大写变体的小写字母。- \n
\\p{Lu}
或\\p{Uppercase_Letter}
:具有小写变体的大写字母。- \n
\\p{Lt}
或\\p{Titlecase_Letter}
:仅当单词的第一个字母大写时出现在单词开头的字母。- \n
\\p{L&}
或\\p{Cased_Letter}
:存在小写和大写变体的字母(Ll、Lu 和 Lt 的组合)。- \n
\\p{Lm}
或\\p{Modifier_Letter}
:像字母一样使用的特殊字符。- \n
\\p{Lo}
或\\p{Other_Letter}
:没有小写和大写变体的字母或表意文字。- \n
\\p{M}
或\\p{Mark}
:要与另一个字符组合的字符(例如重音符号、变音符号、封闭框等)。\n \n\n
- \n
\\p{Mn}
或者\\p{Non_Spacing_Mark}
:用于与另一个字符组合而不占用额外空间的字符(例如\n 重音符号、变音符号等)。- \n
\\p{Mc}
或者\\p{Spacing_Combining_Mark}
:要与另一个占用额外空间的字符组合的字符(许多东方语言中的元音符号)。- \n
\\p{Me}
或者\\p{Enclosing_Mark}
:包含字符的字符与(圆形、方形、键帽等)组合。- \n
\\p{Z}
或者\\p{Separator}
: 任何类型的空格或不可见的分隔符。\n \n\n
- \n
\\p{Zs}
或者\\p{Space_Separator}
:不可见但占用空间的空白字符。- \n
\\p{Zl}
或者\\p{Line_Separator}
:行分隔符 U+2028。- \n
\\p{Zp}
或者\\p{Paragraph_Separator}
:段落分隔符 U+2029。- \n
\\p{S}
或者\\p{Symbol}
:数学符号、货币符号、装饰符号、方框图字符等\n \n\n
- \n
\\p{Sm}
或者\\p{Math_Symbol}
:任何数学符号。- \n
\\p{Sc}
或者\\p{Currency_Symbol}
:任何货币符号。- \n
\\p{Sk}
或者\\p{Modifier_Symbol}
:组合字符(标记)作为其自身的完整字符。- \n
\\p{So}
或者\\p{Other_Symbol}
:不是数学符号、货币符号或组合字符的各种符号。- \n
\\p{N}
或\\p{Number}
: 任何脚本中的任何类型的数字字符。\n \n\n
- \n
\\p{Nd}
或\\p{Decimal_Digit_Number}
:除表意文字之外的任何文字中的数字 0 到 9。- \n
\\p{Nl}
或\\p{Letter_Number}
:看起来像字母的数字,例如罗马数字。- \n
\\p{No}
或\\p{Other_Number}
:上标或下标数字,或非数字 0\xe2\x80\x939 的数字(不包括来自表意文字的数字)。- \n
\\p{P}
或\\p{Punctuation}
: 任何类型的标点字符。\n \n\n
- \n
\\p{Pd}
或\\p{Dash_Punctuation}
:任何类型的连字符或破折号。- \n
\\p{Ps}
或\\p{Open_Punctuation}
:任何类型的左括号。- \n
\\p{Pe}
或\\p{Close_Punctuation}
:任何类型的右括号。- \n
\\p{Pi}
或\\p{Initial_Punctuation}
:任何类型的开场白。- \n
\\p{Pf}
或\\p{Final_Punctuation}
:任何类型的结束报价。- \n
\\p{Pc}
或\\p{Connector_Punctuation}
:标点符号,例如连接单词的下划线。- \n
\\p{Po}
或\\p{Other_Punctuation}
:除破折号、括号、引号或连接符之外的任何类型的标点字符。- \n
\\p{C}
或\\p{Other}
: 不可见的控制字符和未使用的代码点。\n \n\n
- \n
\\p{Cc}
或\\p{Control}
:ASCII 或 Latin-1 控制字符:0x00\xe2\x80\x930x1F 和 0x7F\xe2\x80\x930x9F。- \n
\\p{Cf}
或\\p{Format}
:不可见的格式指示器。- \n
\\p{Co}
或\\p{Private_Use}
:保留供私人使用的任何代码点。- \n
\\p{Cs}
or\\p{Surrogate}
:UTF-16 编码中代理对的一半。- \n
\\p{Cn}
或\\p{Unassigned}
:未分配字符的任何代码点。
归档时间: |
|
查看次数: |
3547 次 |
最近记录: |