需要识别正则表达式中的不匹配字符
Need to identify the non-matching character in 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抛出名称中的空格。所以"我的版本"变成了"我的版本"?当用户输入"我的版本"时,不会发生这种情况。
因此,从选择框中获取的值似乎包含一个看起来像空格但不是空格的字符。我已经将这个值从文本框复制到一个unicode转换器(http://rishida.net/tools/conversion/)中,该转换器标识了基础值的字符,两个集合都报告为0020(空格),但只有一个抛出异常??
是否有办法确定是什么字符导致了这个问题?
任何想法都非常感谢!
欢呼马克尝试:
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"字符。
我注意到你的代码中有一个bug:
version_name.replace(/[^A-Za-z0-9's]/g,'');
应该是
version_name = version_name.replace(/[^A-Za-z0-9's]/g,'');
当然,replace
创建了一个新的字符串,它不会修改现有的字符串。
正如你所发现的那样,替换有时有效,有时无效会怀疑您在一个地方正确地实现了这个,而在另一个地方却不正确。
相关文章:
- 高库存时期时间与时区不匹配
- react路由器使用简单的javascript路由器配置来处理不匹配的路径
- 用于匹配不带字符的单词的正则表达式
- Javascript:图像与单选按钮的值不匹配
- 使用正则表达式查找字符串中的不匹配字符
- 从正则表达式中获取不匹配的字符
- 当按键不匹配时删除输入字符
- 正则表达式不匹配序列中的两个相同字符
- 确定字符串是否包含不在字符列表中的字符,如果是,则确定哪些字符不匹配
- 正则表达式与专业 unicode 字符不匹配
- 正则表达式匹配:字符串开头不包含字符
- 如果数组中的字符串不匹配,请从字符串中删除字符串字符
- Javascript正则表达式与表单中的最后一个字符不匹配
- 匹配JavaScript RegEx中的不可见字符
- 需要识别正则表达式中的不匹配字符
- 匹配字符序列和其他不包含字符序列的字符序列
- Jquery/Form -检查输入字段长度至少为5个字符-并且也不匹配某些单词
- JavaScript正则表达式匹配引号内的字符,而不是字符集中的字符
- 正则表达式:匹配不包含[字符的字符串行
- 不匹配特定非标准字符的十六进制或十进制代码的正则表达式