Javascript 在每个关键字之前添加hashtag

Javascript 在每个关键字之前添加hashtag,javascript,regex,replace,Javascript,Regex,Replace,我是编写JS的新手,希望有人能指导我的关键字系统的正确方向。下面是关键字文本字段行为的要求 仅允许使用非符号字符(包括字母、数字和其他国家的语言)和空格。如果输入了任何符号,则应将其替换为“”/输入文本将不显示符号 输入关键字的第一个非符号字符时,应立即添加哈希(#) 关键字之间用空格分隔 以下是我的代码: 函数hashtag(){ str=document.getElementById('tagid')。值; 标记=str.replace(/#/g')。replace(/([a-zA-Z0-

我是编写JS的新手,希望有人能指导我的关键字系统的正确方向。下面是关键字文本字段行为的要求

  • 仅允许使用非符号字符(包括字母、数字和其他国家的语言)和空格。如果输入了任何符号,则应将其替换为“”/输入文本将不显示符号

  • 输入关键字的第一个非符号字符时,应立即添加哈希(#)

  • 关键字之间用空格分隔

  • 以下是我的代码:

    函数hashtag(){
    str=document.getElementById('tagid')。值;
    标记=str.replace(/#/g')。replace(/([a-zA-Z0-9]+)/g,“#'+”$1');
    document.getElementById('tagid')。value=taged;
    }
    输入关键字:
    
    对于仅在第二次按下时应用的第一个哈希问题,可以使用
    onkeyup=“hashtag();”
    在按下键后执行操作,将文本添加到输入字段并进行计算

    关于JavaScript按键事件,这可能会有所帮助

    为了在仍然允许外来字符的情况下删除符号,我在纯js中找不到任何好的东西(PHP有办法解决这个问题,这很有趣),所以我采取了不同的方法删除所有被排除的字符(希望如果有更多的字符,请编辑以使其更完整),然后“哈希标记”其他不是空间的东西

    这将为您提供如下功能:

    function hashtag() { 
        str = document.getElementById('tagid').value;
        str = str.replace(/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.@#£\/]/g, '');
        tagged = str.replace(/#/g, '').replace(/([^" "]+)/g, '#'+'$1');
        document.getElementById('tagid').value = tagged;
    }
    
    函数hashtag(){
    str=document.getElementById('tagid')。值;
    str=str.replace(/[-!$%^&*()| ~=`{}\[\]:“;”?,.@\/]/g.);
    taged=str.replace(/#/g')。replace(/([^”“])+)/g,“#'+”$1');
    document.getElementById('tagid')。value=taged;
    }
    
    以下是您可以在答案中运行的完整代码:

    
    话题标签
    函数hashtag(){
    str=document.getElementById('tagid')。值;
    str=str.replace(/[-!$%^&*()| ~=`{}\[\]:“;”?,.@\/]/g.);
    taged=str.replace(/#/g')。replace(/([^”“])+)/g,“#'+”$1');
    document.getElementById('tagid')。value=taged;
    }
    输入关键字:
    
  • 绑定到onkeyup事件
  • [a-zA-Z0-9]+
    替换为
    \w+
  • 对于外国符号,您必须一个接一个地添加它们(我试图尽可能多地添加):
  • 我为您的正则表达式添加了I标志,您不必担心大写字母,如“the”,只要您有小写字母
  • 函数hashtag(){
    str=document.getElementById('tagid')。值;
    taged=str.replace(/#/g')。replace(/([\wèèèèèèèèèèèèèèèèèèèè;
    document.getElementById('tagid')。value=taged;
    }

    输入关键字:
    这里有一个应该可以使用的代码片段。我的改变是:

    • 使用
      onkeydown
      而不是
      onkeydup
      触发该功能
      onkeydown
      在将字母插入文本字段之前激发,因此函数看不到您刚才键入的键
    • 使用
      [^a-zA-Z0-9]/g
      作为正则表达式
      ^
      的意思是“除此之外的任何内容”,因此基本上您将删除除此处列出的字符以外的所有内容。您也可以使用
      [^\w]/g
      ,但这也会允许使用下划线,下划线可能需要,也可能不需要
    • 添加一个额外的步骤来预先添加
      #
      ,因为上面的步骤将删除它。(可能看起来很浪费,但它很优雅,足够快)
    函数hashtag(){
    //获取文本字段的当前内容
    var str=document.getElementById('tagid')。值;
    //去除任何非单词字符(也将去除哈希符号)
    str=str.替换(/[^a-zA-Z0-9]/g');
    //重新添加哈希符号
    str='#'+str;
    //更新文本字段
    document.getElementById('tagid')。value=str;
    }
    输入关键字:
    
    我已尽可能多地保留了您的原始代码,如果还有其他问题,请告诉我,我很乐意尝试解决。谢谢!输入问题已修复。如果它允许非英语字符的输入,它将是完美的!嘿@MiuMiu,我在代码中添加了允许使用外来符号的功能,我不得不采取不同的方法,尽管我不太满意,如果你看到更好的方法,请提出建议。如果这个答案对你有帮助,请考虑将来帮助他人,谢谢你的大力帮助!您的解决方案适用于我测试的大多数语言。对于那些具有2个或更多字节字符的语言(例如繁体中文),我只需为最后一个replace regex(即replace(/([^”“]+)/g)添加u,然后问题就解决了。(注意,不确定添加u是否正确,但它适用于我的情况)太好了,我很高兴听到它对你有用,如果你遇到任何更好的东西,请随意编辑或请我帮忙。你如何定义“符号”?那些非语言(如英语、日语、韩语等),非数字字符感谢提醒我使用\w。关于显示非英语语言,我仍然有疑问,我应该添加我想要的所有unicode字符集(例如。\u0080-\uFFFF\u0e00-\u0e7f),还是任何简单的表达式都可以这样做?@MiuMiu您尝试过吗?它不允许我使用空格。