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