在.NET项目中,我需要验证字符串是否是有效的Microsoft SQL Server 2005参数标识符。
示例: SELECT * FROM table WHERE column = @parameter
是否有运行时类方法来验证字符串作为参数,还是有正则表达式来验证规则?(见下文)
From the documentation on identifiers,参数应符合这些通用标识符规则:
- 第一个字符必须是以下之一:*定义的字母 通过Unicode标准3.2。该 字母的Unicode定义包括 从a到z的拉丁字符, 从A到Z,还有信 其他语言的字符。 * 下划线(_),符号(@)或 数字符号(#)。
开头的名称
某些符号 在标识符的开头有 SQL Server中的特殊含义。一个 以...开头的常规标识符 at符号始终表示本地 变量或参数并不能 用作任何其他类型的名称 宾语。以...开头的标识符 数字符号表示临时符号 表或程序。一个标识符 以双号码开头(##) 表示全局临时对象。 虽然数字符号或双倍 数字符号字符可用于 开始其他类型的名称 对象,我们不推荐这个 实践。一些Transact-SQL函数 名字以double开头 标志(@@)。避免混淆 这些功能,你不应该使用 以@@。- 后续字符可包括以下内容:*已定义的字母 在Unicode标准3.2中。 * 来自Basic的十进制数字 拉丁文或其他国家文字。 * at符号,美元符号($),数字 签名或下划线。
- 标识符不能是Transact-SQL保留字。 SQL Server 保留大写和 小写版本的保留字。
- 不允许使用嵌入空格或特殊字符。
- 不允许使用补充字符。
醇>使用标识符时 Transact-SQL语句, 不符合的标识符 这些规则必须由以下划定 双引号或括号。
由于我只想验证参数,因此标识符必须以@符号开头,并且不得分隔。
答案 0 :(得分:6)
我对Unicode字符类感到磕磕绊绊,但是一旦我发现.NET正则表达式支持它们,我想出了以下正则表达式来解决我的问题:
@[\p{L}{\p{Nd}}$#_][\p{L}{\p{Nd}}@$#_]*
这强制执行:
答案 1 :(得分:0)