找回密码
 立即注册
查看: 1308|回复: 0

[技术文章] SQL修改角色名字限制

[复制链接]

155

主题

350

回帖

6215

积分

管理员

积分
6215
金钱
1872
贡献
3838
注册时间
2023-11-3
QQ
发表于 2025-6-6 20:25:12 | 显示全部楼层 |阅读模式
建立新的限制表
; Q' ^4 O* k$ }0 K( U# y2 D6 j* r2 d8 X8 v- u8 u2 ^6 T& v
  1. CREATE TABLE illegal_character_names (partial_name varchar(30))
复制代码
建立新的函数
; o+ {# E; J; m$ m
  1. <span style="color: rgb(28, 31, 35); font-family: Inter, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;SF Pro SC&quot;, &quot;SF Pro Display&quot;, &quot;SF Pro Icons&quot;, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: medium; white-space: pre; background-color: rgb(255, 255, 255);">CREATE FUNCTION dbo.check_valid_character_name (* w" z  v) m) E" L% Q
  2.     @character_name NVARCHAR(40)$ `7 s" w" V2 Q, j( G* N
  3. )
    3 \! `% c( g: K( F" ~
  4. RETURNS TINYINT
    ; P' G/ [( F1 V" V7 m/ t6 f
  5. AS
    3 |) ?& Y/ G4 e6 y; K& e
  6. BEGIN7 F& ~2 L% q8 R( E- h
  7.     DECLARE @result TINYINT = 0;# W6 ~$ W' a- o" T
  8.     DECLARE @char NVARCHAR(1);
    7 ?/ m' w& z: x' M' Z
  9.     DECLARE @i INT = 1;; J. x. P! }6 m2 v( a
  10.     8 C* o( A- @! U" F
  11.     -- 遍历每个字符,检查是否合法8 G, v; q7 E; G4 K
  12.     WHILE @i <= LEN(@character_name)5 D' i$ x+ Z2 \8 d  K6 F. u
  13.     BEGIN7 N: W/ c& X) c  d) _0 y
  14.         SET @char = SUBSTRING(@character_name, @i, 1);6 m9 b1 j9 V2 o, \2 q0 S- t1 x
  15.         
    0 I- `" j1 a) M1 X& O
  16.         -- 检查是否为中文、英文、数字或允许的特殊符号
    1 f7 t6 C( m0 U, A2 _( e
  17.         IF NOT (: E! k. ~6 v5 N9 c, ^
  18.             -- 中文字符范围 (基本多文种平面)$ x( Y1 y; ~4 E1 @" A
  19.             UNICODE(@char) BETWEEN 0x4E00 AND 0x9FFF OR( X7 G: m, H5 M1 i1 n
  20.             -- 英文字母和数字$ y3 I" X; M% v% K% c) Q. t0 R: _
  21.             @char LIKE '[a-zA-Z0-9]' OR
    ) u" T" j: M- S5 W+ u
  22.             -- 允许的特殊符号
    0 M" w/ W" K1 l4 v3 b+ l7 |& Z
  23.             @char LIKE '[_ -]'2 Z1 `! H. g7 o* A
  24.         )3 x- O% L' A- q4 R- ^6 u% E5 c5 Z+ Y& P
  25.         BEGIN
    5 G  o, p5 @4 r7 v8 e
  26.             SET @result = 1;
    + x% C" b2 r3 x) F6 R. g& s5 r
  27.             BREAK;' E1 D0 \+ V: I4 |+ D
  28.         END9 b2 o2 L! o3 L. V) H1 d! ^
  29.         3 B0 N7 `9 V* c  m" r/ L' C! O1 X
  30.         SET @i = @i + 1;
    2 d% P7 Y- Z$ o, O" ]$ h& r
  31.     END;
    ; a" ^, k5 p; X6 L0 I
  32.     8 K  \+ W$ U; S: P+ G  J8 o0 C2 d; Y
  33.     -- 检查是否在非法名称列表中" G: ?  X! W6 K& S9 v
  34.     IF EXISTS (
    " p6 A% V+ `  N) L* a
  35.         SELECT 1 / D& n1 m* @, d; P7 J1 F
  36.         FROM dbo.illegal_character_names
    $ O7 \1 g. \# k* M+ M. p" q
  37.         WHERE @character_name LIKE '%' + partial_name + '%'
    ( M/ @0 W5 H% Q
  38.     )' u, b3 A9 B# m2 Z4 `
  39.         SET @result = 1;
    . E2 g# p: L3 I; k) z
  40.     * S, ~( C" r- U( I2 _
  41.     RETURN @result;
    ) N# e+ z1 j2 [4 f8 j4 z
  42. END</span>4 Y0 S0 w- e* ^8 }9 i' Y
复制代码
插入屏蔽的字符
. B9 O8 Y" e4 d2 O( a
  1. -- 插入非法名称列表(明确列名并使用N前缀)  ~3 _/ ]6 M4 k( F
  2. INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%****%');
    ' q- ~* N2 S" G: V7 `
  3. INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%nigg%');5 K- H* T5 J2 y* n
  4. INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%wank%');
    ; K, r" B# n+ T9 U6 b# p0 c
  5. INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%whore%');& G8 K, c. H- m  A
  6. $ G6 |. i) c9 [( ]* J
  7. -- 示例:查询包含敏感词的角色名9 S0 B$ ~+ I4 y+ V
  8. SELECT *
    ; t. z8 x% J( j" Y( ?, ]! E
  9. FROM dbo.characters
    ; b5 n! K+ H1 [
  10. WHERE EXISTS (1 h+ f! h2 x3 E! m
  11.     SELECT 1
    9 J- ~1 \1 \: \) V, s8 p, w
  12.     FROM dbo.illegal_character_names
    1 E. l- M, M$ e* m  C
  13.     WHERE characters.name LIKE N'%' + illegal_character_names.partial_name + N'%'3 M$ p7 x/ M& s0 }2 |
  14. );
复制代码
修改储存过程  SP_CHAR_CREATE 里面数据  A1 d2 B1 I4 k$ M( [8 |
原始为:8 k* \" e! K6 n" k- ~( J2 ?
  1. EXEC sp_char_name_check @character_name, @v_ret OUTPUT
    % B5 v' \- N  w9 m7 \" t
  2. 9 }/ ~% P! Y' b3 y: F) y
  3. IF @v_ret < 0
    % D* }, l% }$ N3 q7 s. {$ I
  4. BEGIN: v' S) \4 ]4 Q5 L. S5 Z# ]
  5. SET @sp_rtn = @v_ret& [8 E  T; Z) D- p
  6. RETURN* s8 A9 O$ ~5 |2 n- {( {9 K* m
  7. END
复制代码
修改为:' ]/ T% y; O! L9 T2 P  v' {
  1. IF (dbo.NameBlock(@character_name) = 1)
    $ N, o0 ]  f- K& ^5 _5 y
  2. BEGIN( p5 z+ l( g/ \( J( s
  3. SET @sp_rtn = -12- @4 j& {# q$ X3 g8 C2 c
  4. RETURN) ^; {5 Z9 O- M' t, D
  5. END
复制代码
7 R6 a1 t( H0 r8 g4 x( m, A

. h7 C6 o, b. u+ \
$ _3 q, ]' S$ h  }; V; i8 l- i9 T* l
) c2 s# w, C* i& E+ b4 O
商业服务端 登录器 网站 出售
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


Archiver|小黑屋|EGameol

GMT+8, 2026-1-8 21:05 , Processed in 0.251838 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表