问题是从域名中删除一些奇怪的字符,但保留特殊的unicode字符,例如重音字母(德语、波兰语丹麦语) 例如:radisson-blu.es,你看不到,但是ss之间多了一个字符。 (尝试复制到记事本中查看)。
我看过很多关于类似问题的帖子,但每个解决方案都没有删除该特殊字符,或者正在删除它,但也删除了我需要保留的其他特殊字符。
用空字符串替换正则表达式
[^\w\s.,!@#$%^&*()=+~`-]
您在那里(没有)看到的字符是 U+00AD 软连字符。您可以使用
\u00ad
在正则表达式中引用它,例如:
Regex.Replace(str, @"\u00ad", "");
但是对于单字符替换,您也可以使用
string.Replace
。
'\xAD'
是一个软连字符(代码点的名称是 "SOFT HYPHEN"
)。
根据Unicode代码点数据库,其类别为
"Cf"
(或"Format"
),因此可以与正则表达式@"\p{Cf}"
匹配。
奇怪的是,Microsoft Visual C# 2010 Express 表示它不匹配
@"\p{Cf}"
,而是匹配 @"\p{Pd}"
("Dash Punctuation"
),与普通连字符属于同一类别。
这对我有用:
[\x00-\x1f]|[\x81\x8d\x8d\x8f\x90\x9d\xa0\u2060\uFEFF]