1

当用户在保存内容之前提供“版本名称”时,我们使用正则表达式来测试“非法”字符。可接受的字符有:AZ、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;
}

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

发生这种情况时,正则表达式会丢弃名称中的空格。所以“我的版本”变成了“我的版本”?当用户键入“我的版本”时,不会发生这种情况。

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

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

任何想法都非常感谢!

干杯

标记

4

2 回答 2

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 字符转换为常规的“0x20”字符。

于 2013-04-17T10:15:58.410 回答
2

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

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

应该

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

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

当您发现替换有时有效而有时无效时,我会怀疑您在一个地方正确地实现了这一点,而在另一个地方则不正确。

于 2013-04-17T10:22:46.807 回答