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