sqlserver 允许字母、数字、汉字 额外允许字符

现在这个函数可以准确判断字符串是否只包含:

  • 字母(A-Z, a-z)

  • 数字(0-9)

  • 汉字(包括基本汉字和扩展区)

  • 斜杠字符(/

 

CREATE FUNCTION dbo.CheckValidCharactersEx(
@inputString NVARCHAR(MAX),
@extraChars NVARCHAR(50) = NULL -- 额外允许的字符,例如:N'/-_'
)
RETURNS BIT
AS
BEGIN
IF @inputString IS NULL OR LEN(@inputString) = 0
RETURN 1

DECLARE @i INT = 1
DECLARE @len INT = LEN(@inputString)

WHILE @i <= @len
BEGIN
DECLARE @char NCHAR(1) = SUBSTRING(@inputString, @i, 1)
DECLARE @code INT = UNICODE(@char)

-- 快速路径:字母数字
IF (@code BETWEEN 48 AND 57) OR -- 0-9
(@code BETWEEN 65 AND 90) OR -- A-Z
(@code BETWEEN 97 AND 122) -- a-z
BEGIN
SET @i = @i + 1
CONTINUE
END

-- 检查额外允许的字符
IF @extraChars IS NOT NULL AND CHARINDEX(@char, @extraChars) > 0
BEGIN
SET @i = @i + 1
CONTINUE
END

-- 汉字检查(覆盖大部分情况)
IF (@code BETWEEN 19968 AND 40959) OR -- 基本汉字
(@code BETWEEN 13312 AND 19903) OR -- 扩展A
(@code BETWEEN 131072 AND 173791) -- 扩展B
BEGIN
SET @i = @i + 1
CONTINUE
END

-- 如果到达这里,说明有非法字符
RETURN 0
END

RETURN 1
END

posted @ 2025-11-12 09:28  大米粥11  阅读(0)  评论(0)    收藏  举报