确保ascii值

时间:2009-03-15 15:41:43

标签: c# .net

我想确保我的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;
}

3 个答案:

答案 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字符。