You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已设置将.替换为purnviraam的函数,如何在textarea中正常插入点号不被转换

问题解决方法

核心问题原因

你现有的代码存在两个核心问题:

  1. 绑定在textarea上的keyup事件会在每次按键松开后扫描文本内容,把.替换为purnviraam,没有区分输入场景,所以按钮插入的点号、按shift组合键输入的点号都会被误替换。
  2. 原始的字符串替换逻辑仅会替换第一个匹配到的点号,无法实现全局替换效果。

修正后代码

JS代码

// 标记是否允许保留点号,默认关闭,常规输入时自动执行替换逻辑
let allowKeepDot = false;

$(function() {
  $('textarea').on("keyup", function(e) {
    // 按shift键输入、或当前允许保留点号时,跳过替换逻辑
    if (e.shiftKey || allowKeepDot) {
      allowKeepDot = false;
      return;
    }
    const val = $(this).val();
    // 全局匹配替换所有常规输入的点号为purnviraam
    const str = val.replace(/\./g, String.fromCharCode(2404));
    $(this).val(str);
  });
});

function myFunction1() {
  // 插入点号前开启保留开关
  allowKeepDot = true;
  const textarea = document.getElementById("data");
  // 记录当前光标位置,在光标处插入点号而非直接追加到末尾
  const start = textarea.selectionStart;
  const end = textarea.selectionEnd;
  const value = textarea.value;
  textarea.value = value.substring(0, start) + '.' + value.substring(end);
  // 插入后将光标移动到点号后方,符合输入习惯
  textarea.selectionStart = textarea.selectionEnd = start + 1;
  textarea.focus();
}

HTML代码

无需修改原有HTML代码,直接沿用即可。

改动说明

  • 新增allowKeepDot开关变量,点击按钮插入点号时临时开启,替换逻辑检测到开关开启后跳过本次替换,完成操作后自动关闭开关
  • keyup事件中增加e.shiftKey判断,按下shift键时输入的点号不会被替换
  • 优化点号插入逻辑,支持在光标当前位置插入,而非只能追加到文本末尾,输入体验更友好
  • 修正原始替换逻辑仅替换第一个点号的问题,采用全局正则匹配实现全量替换

内容的提问来源于stack exchange,提问作者Mohammad Suhail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:04