【发布时间】:2009-08-20 16:17:09
【问题描述】:
考虑需要确定string 是否包含白名单字符之外的任何字符的算法。
白名单如下所示:
'-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÖÜáíóúñÑÀÁÂÃÈÊËÌÍÎÏÐÒÓÔÕØÙÚÛÝßãðõøýþÿ
注意:此白名单中需要包含空格和撇号。
通常这将是一个静态方法,但它会被转换为扩展方法。
private bool ContainsAllWhitelistedCharacters(string input)
{
string regExPattern="";// the whitelist
return Regex.IsMatch(input, regExPattern);
}
注意事项:
感谢所有回答者的表现。性能不是问题。质量、可读性和可维护性是!更少的代码 = 更少的缺陷机会,IMO。
问题:
这个白名单正则表达式模式应该是什么?
【问题讨论】:
-
如果你像这样为
string做一个扩展方法,它表明所有字符串都受制于它们可以包含和不能包含的白名单,但事实并非如此。 -
@28:感谢您的评论。我意识到所有
string成员都可以使用该方法。开发人员应该明智地调用扩展方法,就像将其实现为实用方法一样。 -
@pcampbell:您应该创建一个不可变结构,其中包含一个已知不包含任何坏字符的字符串(在构造函数中检查)。这样,与
Path类不同,您可以对字符串进行操作,而无需执行 O(n) 检查错误字符。