我想确保我的webapp中的某些输入只包含可以表示为ascii的字符(它用于标记,我试图通过使用varchar而不是nvarchar来节省数据库列中的空间)
是否有框架功能在.net中执行此操作,还是应该逐个检查字符代码以确保它们在正确的范围内?
编辑: 我刚刚写了这个扩展方法,但对于这么简单的东西来说似乎太麻烦了。
public static bool IsAscii(this string value)
{
if (value != null)
for (int current = 0; current < value.Length; current++)
{
if ((int)value[current] > 127)
return false;
}
return true;
}
答案 0 :(得分:2)
鉴于您使用的是扩展方法,您可能会使用C#3和.NET 3.5。在那种情况下,我会使用:
using System.Linq;
...
public static bool IsPrintableAscii(this string value)
{
return value != null && value.All(c => c >= 32 && c < 127);
}
这将检查每个字符是否在[U + 0020-U + 007E]范围内,该范围仅包含可打印字符。这就是你要追求的吗?
正如其他评论所说,这将排除所有带口音的东西等等 - 你确定没关系吗?这也拒绝回车,换行和标签。再说一遍,那好吗?
答案 1 :(得分:1)
您可以通过System.Text.ASCIIEncoding运行文本,这将确保所有内容都是ASCII(任何未映射到ASCII字符的字符都将转换为'?')。
答案 2 :(得分:0)
我在您的解决方案中看到的问题是您将使用您真正不想要的ASCII字符。您还将排除扩展的ASCII代码,如果您的支持其他语言可以很好地存储Accented字符。