需要识别正则表达式中的不匹配字符

时间:2013-04-17 09:42:28

标签: javascript regex

当用户在保存内容之前提供“版本名称”时,我们使用正则表达式来测试“非法”字符。接受的字符是:A-Z,0-9和空格。我们使用以下方法测试:

var version_name = document.getElementById('txtSaveVersionName').value;
if(version_name.search(/[^A-Za-z0-9\s]/)!= -1){ 
  alert("Warning illegal characters have been removed etc");
  version_name.replace(/[^A-Za-z0-9\s]/g,'');
  document.getElementById('txtSaveVersionName').value = version_name;
}

当用户键入其版本名称时,此工作正常。但是,版本名称也可以从动态填充的选择框中获取的数据填充 - 从我们的系统加载的版本名称。

发生这种情况时,regexp会抛出名称中的空格。那么“我的版本”变成了“MyVersion”?当用户键入“我的版本”时,不会发生这种情况。

因此,从选择框中获取的值似乎包含一个看起来像空格但不是空格的字符。我已将此值从文本框复制到unicode转换器(http://rishida.net/tools/conversion/)中,该转换器标识基础值的字符,并且两个集都报告为0020(空格),但只有一个会引发异常?

有没有办法确定导致此问题的角色是什么?

非常感谢任何想法!

干杯

标记

2 个答案:

答案 0 :(得分:2)

尝试:

var str= getSelectBoxValue();
var rez = ""; 
for (var i=0;i<str.length;i++) 
    rez = rez+str[i]+"["+str.charCodeAt(i)+"]"; 

alert(rez);

它应该以Javascript看到的方式为您提供字符串中所有字符的unicode值。当您从屏幕上复制它时,它可能是浏览器/操作系统将一些奇怪的UTF字符转换为常规&#34; 0x20&#34;出于某种原因的角色。

答案 1 :(得分:2)

我注意到您的代码中有错误:

version_name.replace(/[^A-Za-z0-9\s]/g,'');

应该是

version_name = version_name.replace(/[^A-Za-z0-9\s]/g,'');

当然,replace创建一个新字符串,它不会修改现有字符串。

当你发现替换有时会起作用,有时候不起作用 会怀疑你在一个地方正确地表达了这一点而在另一个地方却错误地表达了这一点。