当前位置: 首页 > news >正文

javascript文本长度检测与自动截取,用于标题长度检测

实时检测的效果,比较友好。

设计思路

  • 创建一个文本输入区域

  • 实时显示当前文本长度和最大允许长度

  • 当长度超过90时自动截取文本

  • 提供视觉反馈(进度条和颜色提示)

  • 实现代码

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>文本长度检测与截取工具</title><style>* {box-sizing: border-box;margin: 0;padding: 0;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;}body {background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);min-height: 100vh;display: flex;justify-content: center;align-items: center;padding: 20px;}.container {background: white;border-radius: 12px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);width: 100%;max-width: 600px;padding: 30px;}h1 {color: #2c3e50;text-align: center;margin-bottom: 25px;font-weight: 600;}.input-container {margin-bottom: 20px;}textarea {width: 100%;height: 150px;padding: 15px;border: 2px solid #e0e0e0;border-radius: 8px;font-size: 16px;resize: vertical;transition: border-color 0.3s;}textarea:focus {outline: none;border-color: #3498db;}.counter {display: flex;justify-content: space-between;align-items: center;margin-top: 15px;color: #555;}.progress-container {height: 8px;background: #f0f0f0;border-radius: 4px;margin-top: 5px;overflow: hidden;}.progress-bar {height: 100%;background: #3498db;border-radius: 4px;transition: width 0.3s, background 0.3s;}.warning {color: #e74c3c;font-weight: 500;}.rules {background: #f8f9fa;padding: 15px;border-radius: 8px;margin-top: 20px;font-size: 14px;color: #555;}</style>
</head>
<body><div class="container"><h1>文本长度检测与截取</h1><div class="input-container"><textarea id="textInput" placeholder="请输入或粘贴文本..."></textarea><div class="progress-container"><div class="progress-bar" id="progressBar"></div></div><div class="counter"><span>当前长度: <span id="currentLength">0</span>/90</span><span id="warningText"></span></div></div><div class="rules"><p><strong>计算规则:</strong> 汉字=3个单位,半角字符=1.5个单位,其他字符=2个单位</p></div></div><script>const textInput = document.getElementById('textInput');const currentLengthElement = document.getElementById('currentLength');const progressBar = document.getElementById('progressBar');const warningText = document.getElementById('warningText');// 计算字符串长度(汉字=3,半角字符=1.5,其他=2)function calculateLength(str) {let totalLength = 0;for (let i = 0; i < str.length; i++) {const char = str[i];const charCode = char.charCodeAt(0);// 判断是否为汉字(Unicode范围)if (charCode >= 0x4E00 && charCode <= 0x9FFF) {totalLength += 3;} // 判断是否为半角字符(ASCII字符)else if (charCode >= 0x0000 && charCode <= 0x00FF) {totalLength += 1.5;}// 其他字符(如全角符号等)else {totalLength += 2;}}return totalLength;}// 截取字符串到指定长度function truncateString(str, maxLength) {if (calculateLength(str) <= maxLength) return str;let result = '';let currentLength = 0;for (let i = 0; i < str.length; i++) {const char = str[i];const charCode = char.charCodeAt(0);let charLength = 0;if (charCode >= 0x4E00 && charCode <= 0x9FFF) {charLength = 3;} else if (charCode >= 0x0000 && charCode <= 0x00FF) {charLength = 1.5;} else {charLength = 2;}if (currentLength + charLength > maxLength) {break;}result += char;currentLength += charLength;}return result;}// 更新界面显示function updateDisplay() {const text = textInput.value;const length = calculateLength(text);// 更新长度显示currentLengthElement.textContent = length.toFixed(1);// 更新进度条const percentage = Math.min(100, (length / 90) * 100);progressBar.style.width = percentage + '%';// 更新警告文本和颜色if (length > 90) {currentLengthElement.className = 'warning';progressBar.style.background = '#e74c3c';warningText.textContent = '文本已超过限制,已自动截取';warningText.className = 'warning';// 截取文本const truncatedText = truncateString(text, 90);textInput.value = truncatedText;// 更新显示为截取后的长度const newLength = calculateLength(truncatedText);currentLengthElement.textContent = newLength.toFixed(1);progressBar.style.width = Math.min(100, (newLength / 90) * 100) + '%';} else {currentLengthElement.className = '';progressBar.style.background = '#3498db';warningText.textContent = '';}}// 添加输入事件监听textInput.addEventListener('input', updateDisplay);// 初始化显示updateDisplay();</script>
</body>
</html>

代码可以直接运行!!~~~!!!

功能说明

  1. 实时长度计算:在输入或粘贴文本时,实时计算文本长度(汉字=3,半角字符=1.5,其他字符=2)

  2. 自动截取:当文本长度超过90时,自动截取文本到合适长度

  3. 视觉反馈

    • 进度条显示当前文本长度占比

    • 颜色变化提示(蓝色正常,红色超过限制)

    • 显示警告信息当文本超过限制时

使用方法

  1. 在文本框中输入或粘贴文本

  2. 观察实时长度计算和进度条变化

  3. 当长度超过90时,文本会自动截取到合适长度


文章转载自:

http://IkwnLjVC.hcsnk.cn
http://9macUz3R.hcsnk.cn
http://WDql8hNN.hcsnk.cn
http://JIC3UmtT.hcsnk.cn
http://g40ASQjb.hcsnk.cn
http://Q1uN0Tct.hcsnk.cn
http://kEpcOGt3.hcsnk.cn
http://i3iypcgN.hcsnk.cn
http://pveUCdlK.hcsnk.cn
http://d4440t6H.hcsnk.cn
http://7dbcLk7F.hcsnk.cn
http://mCbcKtK6.hcsnk.cn
http://VKSV3Cc2.hcsnk.cn
http://E4fXWDSN.hcsnk.cn
http://nXco9CMj.hcsnk.cn
http://Cffi8X6R.hcsnk.cn
http://MxxppoRB.hcsnk.cn
http://l7wS0E0Q.hcsnk.cn
http://e4JU4OAY.hcsnk.cn
http://8Zxc0vtH.hcsnk.cn
http://v1TnxvqX.hcsnk.cn
http://b36l9rFs.hcsnk.cn
http://c5Qr0FGM.hcsnk.cn
http://07D7ZZ4D.hcsnk.cn
http://1L4Sh9bW.hcsnk.cn
http://JNgBcjcD.hcsnk.cn
http://CElgckm1.hcsnk.cn
http://jokLxW8R.hcsnk.cn
http://6dgIAeWj.hcsnk.cn
http://Vup8vllp.hcsnk.cn
http://www.dtcms.com/a/383930.html

相关文章:

  • 解锁 DALL・E 3:文生图多模态大模型的无限可能
  • 深入理解 LVS-DR 模式与 Keepalived 高可用集群
  • 数据库学习MySQL系列4、工具一 Navicat Premium 图形化软件的使用详细教程
  • RL【10-2】:Actor - Critic
  • MATLAB学习文档(十六)
  • 滑动窗口概述
  • 【C++语法】模版初阶
  • 机械制造工艺指南
  • Wi-Fi技术——Power SAVE模式
  • leetcode39(相同的树)
  • C++(虚函数表原理和菱形继承)
  • 【STM32项目开源】STM32单片机智能语音风扇控制系统
  • [Android]自定义view
  • 线程和进程,以及GCD的简单使用
  • C++_STL和数据结构《1》_STL、STL的迭代器、c++中的模版、STL的容器、列表初始化、三个算法、链表
  • 学习日报|线程池专题学习总结
  • kubectl 报错 couldn‘t get current server API group list:
  • 求最小公倍数(GCD)和最大公约数(LCM)——原理和代码
  • 单调栈数据结构
  • OceanBase V4.3.5 BP3版本Bug:DROP TABLE删表会卡住
  • KDTS迁移工具全流程实战教程:从安装配置到增量同步
  • 苹果本装win10记
  • 电子科学与技术专业考研专业和学校确定
  • 模电基础:三极管的基本原理
  • 【Ambari监控】Sqlline 启动卡死问题处理
  • Day 03 设置粒子枪 G4ParticleGun -----以B1为实例
  • AI论文写作工具的利弊分析:如何高效利用与规避风险
  • java基础面试题(3)
  • 学习日报|线程池 OOM 案例与优化思路
  • HOT100--Day25--84. 柱状图中最大的矩形,215. 数组中的第K个最大元素,347. 前 K 个高频元素