当我在site测试我的javascript时,它的行为与我期望的一样。
然而,当我尝试在我的页面上测试时,它总是没有通过测试
function testName() {
if (new RegExp('^(?!^(\..+)?$)[^\x00-\x1f\\?*:^&!`~@#$$+=<>\?\*;|/]+$').test("me")) {
alert("good");
}
else {
alert("invalid characters");
} return false;
}
表达式应该测试特殊字符的文件名,例如^&*!~
+ =&lt;&gt;`等。
我错过了一些愚蠢的东西吗?
答案 0 :(得分:6)
当你将正则表达式放入一个字符串时(比如使用“new RegEx()”而不是/.../表示法),正则表达式字符串必须改变。为什么?因为它现在将被解析两次而不是一次:首先,作为字符串 - 这意味着在字符串常量内发生的所有正常反斜杠处理将发生,其次,作为正则表达式。
答案 1 :(得分:1)
不想解析你丑陋的RE,我可以看到两个问题之一:
您的测试是倒退的。 test()调用将在上面的示例中返回false
,这意味着它与“我”中的任何不良字符都不匹配,因此您将收到一条警告“无效字符”,这是向后的。
您的测试语法错误。请尝试使用正则表达式文字:
if (/^(?!^(\..+)?$)[^\x00-\x1f\\?*:^&!`~@#$$+=<>\?\*;|/]+$/.test("me")) {
答案 2 :(得分:1)
除了转义问题,前瞻断言(您的(?!
组)只是broken in IE(并且不在原始JavaScript规范中)。它们不应该用在客户端JavaScript中。相反,将该子句中的测试分解为单独的if条件。
(如果这是一个文件名测试者,你不应该依赖它来保证安全性,因为它有许多破碎的构造它没有捕获。)
答案 3 :(得分:0)
一旦我关闭了我的浏览器并清除了缓存,我的原始表达结果正常工作,这很好,因为像Warren young说替换表达式很难看。
if(/^[\w-. ()\']+$/.test(this.form.mediaFile.value)) return true;
else return false;