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