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

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

[复制链接]

157

主题

362

回帖

6846

积分

管理员

积分
6846
金钱
1946
贡献
4381
注册时间
2023-11-3
QQ
发表于 2025-6-6 20:25:12 | 显示全部楼层 |阅读模式
建立新的限制表5 ~( K2 c' h& l( S

( y3 s1 }* Y9 Z  l# Y/ {
  1. CREATE TABLE illegal_character_names (partial_name varchar(30))
复制代码
建立新的函数( O% I# q+ `' B# n) O: ^; p% j
  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 (* m4 ?' Z6 j) _+ o0 ?  _% s
  2.     @character_name NVARCHAR(40)
    7 H: j6 c  ~3 v. u) }
  3. )2 a2 j- e$ C/ `9 r: w& }
  4. RETURNS TINYINT: m6 k+ |6 w$ y/ G
  5. AS
    5 ~2 H2 p% T( X7 B: T
  6. BEGIN
    ' P, W2 `0 _" f( v4 d; I
  7.     DECLARE @result TINYINT = 0;
    5 F( C7 L; E: n7 t3 h" P. c- @- s
  8.     DECLARE @char NVARCHAR(1);
    , i8 U( o7 k2 a
  9.     DECLARE @i INT = 1;
    : Y' h. ~1 W1 m3 b
  10.       A$ x! A5 t2 u6 L8 `8 |. a5 p# |
  11.     -- 遍历每个字符,检查是否合法4 |3 \  X$ L9 k: `
  12.     WHILE @i <= LEN(@character_name)* Q( f+ N% Y9 P; d8 G1 P
  13.     BEGIN
    ! E/ F% r+ I6 r1 c
  14.         SET @char = SUBSTRING(@character_name, @i, 1);
    $ J( R  v0 M4 B5 O
  15.         * h2 V! U/ }3 `+ ~  i6 V7 t
  16.         -- 检查是否为中文、英文、数字或允许的特殊符号
    % O9 y: N( c; \; X
  17.         IF NOT (8 G1 x8 u' K) J1 k# ]
  18.             -- 中文字符范围 (基本多文种平面)
    9 f7 e6 r, K) [' h7 k+ m1 U$ l
  19.             UNICODE(@char) BETWEEN 0x4E00 AND 0x9FFF OR
    , L. v, c4 v8 C& i! x  @8 Q1 f9 S) j
  20.             -- 英文字母和数字
    * v% f' e0 w  g. p$ m
  21.             @char LIKE '[a-zA-Z0-9]' OR
    ' h* V$ o2 D+ x6 ?: j0 K- Z0 u
  22.             -- 允许的特殊符号% E) L0 H% S% a$ j
  23.             @char LIKE '[_ -]'+ u) B6 q9 a& z
  24.         )
    9 D- p, m$ Y' w5 N
  25.         BEGIN
    ' _+ {3 K/ Z) S' X; o2 k
  26.             SET @result = 1;7 i; a7 H+ `0 P* l) F
  27.             BREAK;
    1 L  A7 s$ f5 [/ x% b
  28.         END3 s) \/ U. x. p
  29.         8 W4 H" L" c5 P
  30.         SET @i = @i + 1;
    0 p9 f) h. O1 ~" Q4 n  E) f  W' j
  31.     END;
    0 B! d) O. r; h  G2 o
  32.    
    7 O2 C+ X+ w; q8 [' R% p0 [* O
  33.     -- 检查是否在非法名称列表中  F& x4 x8 z; p  X: K& T% L4 C
  34.     IF EXISTS (/ p/ K/ f$ Y. p& {+ l" {) V
  35.         SELECT 1 9 h/ F2 E' @4 @/ \9 w' Z
  36.         FROM dbo.illegal_character_names - a: T( I# d7 e6 Y" W& j
  37.         WHERE @character_name LIKE '%' + partial_name + '%'. N1 O: p9 w% n$ U+ S
  38.     )& J- e- C2 g, p% ]# d7 j
  39.         SET @result = 1;# c% o  K9 @8 |6 v
  40.    
    2 I9 ]% ?  G4 u9 o
  41.     RETURN @result;0 z5 K6 O" D* m* u) C! J
  42. END</span>( l* Z3 S( ^1 `0 C! a- u
复制代码
插入屏蔽的字符
0 N+ J3 f! A- I& O
  1. -- 插入非法名称列表(明确列名并使用N前缀)) j$ K. ?0 ^8 M2 H* e( b/ u
  2. INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%****%');' ?6 }/ E7 T) J8 T
  3. INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%nigg%');' J  ~: m6 g: G" O3 \
  4. INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%wank%');3 e+ l, \9 _3 L. ]  E# N+ B
  5. INSERT INTO dbo.illegal_character_names (partial_name) VALUES (N'%whore%');- J/ `1 W1 Z8 r3 m' E% z0 @
  6. + L5 p5 Z) A* A, @
  7. -- 示例:查询包含敏感词的角色名
    ; v3 A6 H& C3 o! H. [8 n- K$ J
  8. SELECT *
    0 C' u+ |! O' E7 q: i. |3 x
  9. FROM dbo.characters 0 I% a& G8 F; Y; [! ?0 e- p% C
  10. WHERE EXISTS (, A6 v& B4 _2 F5 k  @3 w7 ]
  11.     SELECT 1 3 d/ z+ K7 H( T+ n
  12.     FROM dbo.illegal_character_names 9 Y, C" \; G$ n/ X
  13.     WHERE characters.name LIKE N'%' + illegal_character_names.partial_name + N'%', e* v' W5 f3 B8 y& Z/ _9 n/ v
  14. );
复制代码
修改储存过程  SP_CHAR_CREATE 里面数据
) S% l/ k" X+ J6 C6 |! c原始为:
, J: X9 \4 R5 h, r
  1. EXEC sp_char_name_check @character_name, @v_ret OUTPUT
    7 N1 G& N4 i- ?, t5 O

  2. ) w2 o- p$ c2 ^3 W4 I
  3. IF @v_ret < 0
    2 V/ a$ c8 Y, Z0 @  K
  4. BEGIN
    2 o  J  K- d% W$ H" z  E
  5. SET @sp_rtn = @v_ret
    / t" u9 [% j' C7 B0 j* N" E) g
  6. RETURN2 W% ^$ {' T. d2 s; U  O) i, F
  7. END
复制代码
修改为:
  w: M1 U# J: L+ }$ u& h2 t
  1. IF (dbo.NameBlock(@character_name) = 1)
    ) e1 d. R* @. R8 k6 [
  2. BEGIN" A9 h9 O" u/ I; E( x$ J% a2 ]
  3. SET @sp_rtn = -12
    - t7 Q7 ~9 t! U, R! |
  4. RETURN
    * D7 ?$ y0 W+ u8 R, r3 M
  5. END
复制代码

7 t0 j  J/ B  R9 M/ }5 |! q% ?+ @& q
2 o2 ^( T! m% ^% V5 Q/ A" Y5 r1 S% {

& g+ c5 @4 \/ y9 g1 b, U3 M
商业服务端 登录器 网站 出售
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


Archiver|小黑屋|EGameol

GMT+8, 2026-2-19 09:56 , Processed in 0.052887 second(s), 27 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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