* 检查文本是否为纯数字或标准数字格式 * * 识别以下数字格式: * 1. 整数 (例如: 12345, -123) * 2. 带千位分隔符的数字 (例如: 1,234,567) * 3. 数字范围 (例如: 1-100, 5~10) * 4. 小数 (例如: 3.14159) * 5. 百分比 (例如: 85%, -2.5%) * 6. 科学计数法 (例如: 1.23e+4) * 7. 货币金额 (例如: $123.45, €100) * 8. 常见日期格式 (例如: 2023-01-01, 01/01/2023) * 9. 时间格式 (例如: 13:45:30,
(text: string)
| 266 | * 这些格式的数字和用户标识符通常不需要翻译,保持原样更有利于页面理解。 |
| 267 | */ |
| 268 | function isNumericContent(text: string): boolean { |
| 269 | if (!text || typeof text !== 'string') return false; |
| 270 | |
| 271 | // 去除空白字符 |
| 272 | const trimmedText = text.trim(); |
| 273 | if (!trimmedText) return false; |
| 274 | |
| 275 | // 首先检查是否为用户标识符 |
| 276 | if (isUserIdentifier(trimmedText)) return true; |
| 277 | |
| 278 | // 如果包含多个单词,则不视为纯数字内容 |
| 279 | if (/\s+/.test(trimmedText.replace(/[\d,.\-%+]/g, ''))) return false; |
| 280 | |
| 281 | // 检查是否为纯数字 |
| 282 | if (/^-?\d+$/.test(trimmedText)) return true; |
| 283 | |
| 284 | // 检查是否为标准数字格式:带逗号的数字 (例如: 1,234,567) |
| 285 | if (/^-?(\d{1,3}(,\d{3})+)$/.test(trimmedText)) return true; |
| 286 | |
| 287 | // 检查是否为范围数字 (例如: 1-123) |
| 288 | if (/^\d+\s*[-~]\s*\d+$/.test(trimmedText)) return true; |
| 289 | |
| 290 | // 检查是否为小数 |
| 291 | if (/^-?\d+\.\d+$/.test(trimmedText)) return true; |
| 292 | |
| 293 | // 检查是否为百分比 |
| 294 | if (/^-?\d+(\.\d+)?%$/.test(trimmedText)) return true; |
| 295 | |
| 296 | // 检查是否为科学计数法 (例如: 1.23e+4) |
| 297 | if (/^-?\d+(\.\d+)?(e[-+]\d+)?$/i.test(trimmedText)) return true; |
| 298 | |
| 299 | // 检查是否为带货币符号的金额 (例如: $123.45, €123, ¥123) |
| 300 | if (/^[$€¥£₹₽₩]?\s*-?\d+(,\d{3})*(\.\d+)?$/.test(trimmedText)) return true; |
| 301 | |
| 302 | // 检查是否为日期时间格式 (仅考虑常见的数字日期格式) |
| 303 | // 匹配 YYYY-MM-DD, YYYY/MM/DD, DD-MM-YYYY, DD/MM/YYYY, MM-DD-YYYY, MM/DD/YYYY |
| 304 | if (/^(\d{4}[-/]\d{1,2}[-/]\d{1,2}|\d{1,2}[-/]\d{1,2}[-/]\d{4}|\d{1,2}[-/]\d{1,2}[-/]\d{1,2})$/.test(trimmedText)) return true; |
| 305 | |
| 306 | // 匹配时间格式 HH:MM:SS, HH:MM |
| 307 | if (/^\d{1,2}:\d{2}(:\d{2})?$/.test(trimmedText)) return true; |
| 308 | |
| 309 | // 匹配版本号 (例如: 1.0.0, 2.3.5-beta) |
| 310 | if (/^\d+(\.\d+){1,3}(-[a-zA-Z0-9]+)?$/.test(trimmedText)) return true; |
| 311 | |
| 312 | // 匹配社交媒体的ID格式 |
| 313 | if (/^id@https?:\/\/(x\.com|twitter\.com)\/[\w-]+\/status\/\d+/.test(trimmedText)) return true; |
| 314 | |
| 315 | // 匹配常见的数字ID格式 |
| 316 | if (/^ID[::]?\s*\d+$/.test(trimmedText)) return true; |
| 317 | if (/^No[\.:]?\s*\d+$/i.test(trimmedText)) return true; |
| 318 | |
| 319 | // #数字 格式的 |
| 320 | if (/^#[\d]+$/.test(trimmedText)) return true; |
| 321 | |
| 322 | return false; |
| 323 | } |
| 324 | |
| 325 | // 检查是否为按钮 |
no test coverage detected