我是编码JS的新手,希望有人能引导我找到关键字系统的正确方向。以下是关键字文字字段行为的要求。
只允许使用非符号字符(包括字母,数字和其他国家/地区的语言)和空格。如果输入任何符号,则应将其替换为'' /输入文本不会显示符号。
当输入关键字的第一个非符号字符时,应立即添加哈希值(#)。
关键字以空格分隔
以下是我的代码:
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;
问题是,哈希(#)只能在我输入第二个非符号字符/空格时添加,但不能添加第一个。并且,没有处理符号&#39;在其他国家/地区语言之前添加输入并且没有添加哈希。
提前致谢!
答案 0 :(得分:2)
这是一个应该有用的代码片段。我的更改是:
onkeydown
代替onkeyup
来触发此功能。 <{1}}在字母插入文本字段之前触发,因此该功能无法看到您输入的密钥。onkeydown
作为正则表达式。 [^a-zA-Z0-9]/g
表示&#34;除了&#34;之外的其他任何内容,所以基本上你除了那里列出的字符之外都删除了所有内容。您也可以使用^
,但也可以使用可能需要或可能不需要的下划线。[^\w]/g
,因为上面的步骤将其删除。 (可能看起来很浪费,但它很优雅,足够快)
#
&#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;
答案 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)
[a-zA-Z0-9]+
替换为\w+
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();"/>