在每个关键字前添加主题标签

时间:2015-08-25 16:44:53

标签: javascript regex replace

我是编码JS的新手,希望有人能引导我找到关键字系统的正确方向。以下是关键字文字字段行为的要求。

  1. 只允许使用非符号字符(包括字母,数字和其他国家/地区的语言)和空格。如果输入任何符号,则应将其替换为'' /输入文本不会显示符号。

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

  3. 关键字以空格分隔

  4. 以下是我的代码:

    
    
    function hashtag() {
      str = document.getElementById('tagid').value;
      tagged = str.replace(/#/g, '').replace(/([a-zA-Z0-9]+)/g, '#' + '$1');
      document.getElementById('tagid').value = tagged;
    }
    
    Enter keyword:
    <input type="text" name="tag" id="tagid" onkeypress="hashtag();" />
    &#13;
    &#13;
    &#13;

    问题是,哈希(#)只能在我输入第二个非符号字符/空格时添加,但不能添加第一个。并且,没有处理符号&#39;在其他国家/地区语言之前添加输入并且没有添加哈希。

    提前致谢!

3 个答案:

答案 0 :(得分:2)

这是一个应该有用的代码片段。我的更改是:

  • 使用onkeydown代替onkeyup来触发此功能。 <{1}}在字母插入文本字段之前触发,因此该功能无法看到您输入的密钥。
  • 使用onkeydown作为正则表达式。 [^a-zA-Z0-9]/g表示&#34;除了&#34;之外的其他任何内容,所以基本上你除了那里列出的字符之外都删除了所有内容。您也可以使用^,但也可以使用可能需要或可能不需要的下划线。
  • 添加额外的步骤以预先添加[^\w]/g,因为上面的步骤将其删除。 (可能看起来很浪费,但它很优雅,足够快)

&#13;
&#13;
#
&#13;
function hashtag() {
  
  //get the current contents of the text field
  var str = document.getElementById('tagid').value;
  
  //strip any non-word characters (will also strip hash symbol)
  str = str.replace(/[^a-zA-Z0-9]/g, '');
  
  //add the hash symbol back
  str = '#' + str;
  
  //update the text field
  document.getElementById('tagid').value = str;
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

对于仅在第二次按下时应用的第一个哈希值,您可以使用onkeyup="hashtag();"在按键后执行操作,一旦将文本添加到输入字段,然后可以对其进行评估。

Here is some documentation关于可能有用的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;
}

以下是您可以在答案中运行的完整代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HashTag</title>
<SCRIPT TYPE="TEXT/JAVASCRIPT"> 

function hashtag() { 
    str = document.getElementById('tagid').value;
    str = str.replace(/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.@#£\/]/g, '');
    tagged = str.replace(/#/g, '').replace(/([^" "]+)/g, '#'+'$1');
    document.getElementById('tagid').value = tagged;
}
</script>

</head>

<body>

Enter keyword: <INPUT TYPE="text" NAME="tag" id="tagid" onkeyup="hashtag();"></input>
</body>
</html>

答案 2 :(得分:0)

  1. 绑定到onkeyup事件
  2. [a-zA-Z0-9]+替换为\w+
  3. 对于外国符号,你必须逐个添加它们(我试着尽可能多地添加它们):
  4. 我为你的正则表达式添加了i标志,只要你有小写字母,就不必担心大写字母,只要你有小写字母
  5. function hashtag() { 
        str = document.getElementById('tagid').value;
        tagged = str.replace(/#/g, '').replace(/([\wâàãäéèêëîìôòõòùûüñ]+)/gi, '#'+'$1');
        document.getElementById('tagid').value = tagged;
    }
    Enter keyword: <input TYPE="text" NAME="tag" id="tagid" onkeyup="hashtag();"/>

    编辑:

    不确定是否要保留或删除特殊字符,这里是一个版本被删除的特殊字符:

    function hashtag() { 
        str = document.getElementById('tagid').value;
        // remove things
        str = str.replace(/[^\w ]/g, '');
        tagged = str.replace(/(\w+)/gi, '#'+'$1');
        document.getElementById('tagid').value = tagged;
    }
    Enter keyword: <input TYPE="text" NAME="tag" id="tagid" onkeyup="hashtag();"/>