Lọc văn bản

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Áp dụng cho các nguồn và đầu vào khác nhau, lọc văn bản ngăn người dùng không thể nhìn thấy ngôn ngữ không phù hợp và thông tin có thể nhận dạng cá nhân như số điện thoại.Roblox tự động lọc các đầu ra văn bản thông thường như tin nhắn đã đi qua trong trò chuyện văn bản trong kinh nghiệm , nhưng bạn có trách nhiệm lọc bất kỳ văn bản nào được hiển thị mà bạn không có sự kiểm soát rõ ràng .

Lọc các kịch bản

Văn bản có thể được thu thập và/hoặc hiển thị cho người dùng trong nhiều tình huống, bao gồm:

  • Một trải nghiệm thu thập đầu vào văn bản của người dùng thông qua đầu vào bằng các câu trả lời, một GUI tùy chỉnh với các nút như một bàn phím/bàn phím, hoặc một mô hình bàn phím tương tác trong không gian 3D.

  • Một trải nghiệm tạo ra từ các từ ngẫu nhiên và hiển thị chúng cho người dùng, vì có cơ hội nó sẽ tạo ra từ khóa không phù hợp.

  • Một trải nghiệm kết nối với một máy chủ web bên ngoài để lấy nội dung được hiển thị trong trải nghiệm.Thường bạn sẽ không có quyền kiểm soát nội dung của trang web bên ngoài và một bên thứ ba có thể chỉnh sửa thông tin.

  • Một trải nghiệm lưu văn bản như tên vật nuôi của người dùng bằng cách sử dụng kho dữ liệu, nơi văn bản lưu trữ có thể bao gồm các từ không phù hợp nên bị lọc khi lấy lại chúng.

Quá trình lọc

TextService:FilterStringAsync() lọc văn bản trong trải nghiệm bằng cách lấy một chuỗi văn bản và UserId của người dùng đã tạo văn bản làm đầu vào.Nó trả về một đối tượng TextFilterResult có hai phương pháp bổ sung mà bạn có thể gọi trong các tình huống khác nhau:

  • TextFilterResult:GetNonChatStringForBroadcastAsync() cho việc lọc văn bản có thể nhìn thấy được với tất cả người dùng trong một trải nghiệm, chẳng hạn như cho một hộp thoại cho phép người dùng viết tin nhắn trên một tấm bảng có thể nhìn thấy được với tất cả người dùng trên máy chủ.
  • TextFilterResult:GetNonChatStringForUserAsync() để hiển thị văn bản lọc cho một người dùng cụ thể, dựa trên tuổi và các chi tiết khác.

Trong bối cảnh TextBox nhập, ví dụ sau đây thu thập nhập vào sự kiện FocusLost và gửi nó đến máy chủ thông qua một RemoteEvent .Trên máy chủ, nó được lọc trước tiên thông qua FilterStringAsync() và sau đó GetNonChatStringForBroadcastAsync() với ý định rằng văn bản sẽ được hiển thị cho tất cả người dùng trên một đối tượng bên máy chủ như một SurfaceGui trong thế giới 3D.

Lọc nhập văn bản - kịch bản khách hàng

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- Sự kiện remote để gửi nhập văn bản vào máy chủ để lọc
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Xử lý sự kiện cho tập trung bị mất và nhập đang được nhấn
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("SUBMITTED:", textBox.Text)
if inputRemoteEvent then
inputRemoteEvent:FireServer(textBox.Text)
end
end
end
textBox.FocusLost:Connect(onFocusLost)
Lọc nhập vào văn bản - Server Script

local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Sự kiện remote để nhận nhập văn bản từ khách hàng để lọc
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
local function getFilterResult(text, fromUserId)
local filterResult
local success, errorMessage = pcall(function()
filterResult = TextService:FilterStringAsync(text, fromUserId)
end)
if success then
return filterResult
else
warn("Error generating TextFilterResult:", errorMessage)
end
end
-- Bị bắn khi khách hàng gửi nhập từ TextBox
local function onInputReceived(player, text)
if text ~= "" then
local filterResult = getFilterResult(text, player.UserId)
if filterResult then
local success, filteredText = pcall(function()
return filterResult:GetNonChatStringForBroadcastAsync()
end)
if success then
print("FILTERED:", filteredText)
else
warn("Error filtering text!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)