From 9876496c78e97fa6875bb07df9f4eb10883b8ff0 Mon Sep 17 00:00:00 2001 From: SeniorZhai Date: Wed, 27 May 2026 09:35:05 +0800 Subject: [PATCH] fix(search): require .mao suffix in isValidMao to reduce search API calls The previous regex only excluded whitespace and uppercase, so almost any typed keyword (e.g. 'hello', 'abc', 'a') triggered the MAO user lookup API and risked rate limiting / bans. Tighten isValidMao to match the MAO domain pattern (^[^\sA-Z]{1,128}\.mao$) and reject pure-digit names, so the API is only hit when the keyword actually looks like a MAO domain. --- .../one/mixin/android/extension/StringExtension.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/one/mixin/android/extension/StringExtension.kt b/app/src/main/java/one/mixin/android/extension/StringExtension.kt index 15df647f52..3d0a7181a6 100644 --- a/app/src/main/java/one/mixin/android/extension/StringExtension.kt +++ b/app/src/main/java/one/mixin/android/extension/StringExtension.kt @@ -823,10 +823,12 @@ fun BigDecimal.currencyFormat(): String { fun String?.isValidMao(): Boolean { if (this.isNullOrBlank()) return false - val text = this.trimEnd('.').lowercase() - if (text.all { it.isDigit() }) return false - val regex = Regex("^[^\\sA-Z]{1,128}$") - return regex.matches(text) + val text = this.lowercase() + val regex = Regex("^[^\\sA-Z]{1,128}\\.mao$") + if (!regex.matches(text)) return false + val name = text.removeSuffix(".mao") + if (name.isBlank() || name.all { it.isDigit() }) return false + return true } fun String.isMao(): Boolean {