用于验证SQL Server中的表名的正则表达式(数据库兼容性级别120)

新泽西州

我正在尝试使用此Stack Overflow答案来验证表/列的名称,但是它不起作用。

对于ValidateTableName("18_18_mapped"),它返回false但是,ValidateTableName("mappingStorage_f9dc07dbca414e2d86db00114a9104a3")它会返回true

验证表/列名的任何输入将很有帮助。

static void Main(string[] args)
{
    bool temp = ValidateTableName("18_18_mapped"); // Returns false
    ...
}

private static bool ValidateTableName(string tableName)
{
    string regexForTableName = @"^[\p{L}_][\p{L}\p{N}@$#_]{0,127}$";
    return Regex.IsMatch("[" + tableName + "]", regexForTableName);
}   
威克多·斯特里比尤

不要添加方括号:

return Regex.IsMatch(tableName, regexForTableName);

模式中的方括号对于表示字符类是必需的。这些不是文字方括号。

另外,我将在方法之外声明/编译正则表达式以提高效率:

private static readonly Regex regexForTableName = new Regex(@"^[\p{L}_][\p{L}\p{N}@$#_]{0,127}$");

private static bool ValidateTableName(string tableName)
{
    return regexForTableName.IsMatch(tableName);
}   

编辑

根据MSDN,这些是数据库标识符规范我找不到任何说明第一个字符可以是数字的规范。但是,如果需要允许,请添加\p{N}模式:

^(?:[\p{N}\p{L}_][\p{L}\p{N}@$#_]{0,127}|\[.{1,126}\])$

我要添加\[.{1,126}\]支持所有包含在中的名称[],并且它们的长度必须为128个字符。正则表达式仅匹配非临时表名。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用于验证SQL Server表名的正则表达式

来自分类Dev

将正则表达式应用于R中的SQL数据库

来自分类Dev

用于验证SQL的正则表达式

来自分类Dev

如何检查更改SQL Server数据库兼容性级别的安全性?

来自分类Dev

正则表达式用于MySQL数据库中的字符串替换

来自分类Dev

用于解析SQL Server架构和表名的正则表达式

来自分类Dev

正则表达式匹配,将字符串数据插入SQL数据库

来自分类Dev

用于验证Netezza DB中数据格式的正则表达式

来自分类Dev

正则表达式,用于在Atom Editor中替换整个代码库中的类名

来自分类Dev

用于密码验证的正则表达式

来自分类Dev

用于版本号验证的正则表达式

来自分类Dev

JS正则表达式用于密码验证匹配

来自分类Dev

用于双数范围验证的正则表达式

来自分类Dev

用于序列号验证的正则表达式

来自分类Dev

用于IP验证的正则表达式

来自分类Dev

用于密码验证和匹配的正则表达式

来自分类Dev

用于验证密码字段的正则表达式

来自分类Dev

用于URL验证的正则表达式

来自分类Dev

用于验证数字管道的正则表达式

来自分类Dev

用于URL验证的正则表达式

来自分类Dev

用于验证FQDN的正则表达式

来自分类Dev

用于Java日期验证的正则表达式

来自分类Dev

什么是用于验证Linux用户的正则表达式?

来自分类Dev

用于验证用户输入的正则表达式

来自分类Dev

如何创建用于密码验证的正则表达式

来自分类Dev

用于验证字符串的正则表达式

来自分类Dev

用于通配符域验证的正则表达式

来自分类Dev

用于密码验证和匹配的正则表达式

来自分类Dev

用于IP验证的正则表达式