当用户在保存内容之前提供“版本名称”时,我们使用正则表达式来测试“非法”字符。可接受的字符有: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 (空格),但只有一个会引发异常??
有没有办法确定导致此问题的角色是什么?
任何想法都非常感谢!
干杯
标记