我正在编写一些处理网站内容的JavaScript。当用户按下退格键时,SharePoint文本编辑器倾向于在文本中放置“零宽度空格”字符,这阻碍了我的努力。 字符的unicode值为8203,或十六进制的B200。我试图使用默认的“替换”功能来摆脱它。我尝试了很多变种,但没有一个变化:
var a = "om"; //the invisible character is between o and m
var b = a.replace(/\u8203/g,'');
= a.replace(/\uB200/g,'');
= a.replace("\\uB200",'');
依此类推。我在这个主题上尝试了很多变化。这些表达式都不起作用(在Chrome和Firefox中测试)唯一有效的方法是在表达式中键入实际字符:
var b = a.replace("",''); //it's there, believe me
这带来了潜在的问题。角色是不可见的,因此线条本身没有意义。我可以通过评论解决这个问题。但是,如果代码被重用,并且使用非Unicode编码保存文件(或者当它部署到SharePoint时,不能保证它不会弄乱编码)它将停止工作。有没有办法用unicode符号而不是字符本身来写这个?
[我对这个角色的谣言]
如果你没有遇到这个角色,(你可能没有,看到它肉眼看不见,除非它破坏你的代码并且你在试图找到它时发现了它)这是一个真实的 - 孔将导致某些类型的模式匹配故障。我把这只野兽关在笼子里了:
[]< - 小心,不要让它逃脱。
如果要查看它,请将这些括号复制到文本编辑器中,然后通过它们迭代光标。你会发现你需要三个步骤来传递看似2个字符的东西,你的光标会跳过中间的一个步骤。
答案 0 :(得分:23)
unicode转义中的数字应为十六进制,8203的十六进制为200B(实际上是Unicode zero-width space),所以:
var b = a.replace(/\u200B/g,'');
var a = "om"; //the invisible character is between o and m
var b = a.replace(/\u200B/g,'');
console.log("a.length = " + a.length); // 3
console.log("a === 'om'? " + (a === 'om')); // false
console.log("b.length = " + b.length); // 2
console.log("b === 'om'? " + (b === 'om')); // true
答案 1 :(得分:3)
接受的答案对我的案子不起作用。
但是这个人做了:
def contato(request):
form = "Dummy String"
form_class = ContactForm
# if request is not post, initialize an empty form
#form = form_class(request.POST or None) # Maybe Not
form = form_class(request.POST ) # Instead
if request.method == 'POST':
if form.is_valid():
nome = request.POST.get('nome')
email = request.POST.get('email')
msg = request.POST.get('msg')
send_mail('Subject here', msg, email, ['testmail@gmail.com'], fail_silently=False)
return HttpResponseRedirect('blog/inicio')
return render(request, 'blog/inicio.html', {'form': form})