Javascript RegExp总是失败

时间:2009-10-20 17:00:00

标签: javascript regex

当我在site测试我的javascript时,它的行为与我期望的一样。

然而,当我尝试在我的页面上测试时,它总是没有通过测试

function testName() {
    if (new RegExp('^(?!^(\..+)?$)[^\x00-\x1f\\?*:^&!`~@#$$+=<>\?\*;|/]+$').test("me")) {
        alert("good");
    }
    else {
        alert("invalid characters");
    } return false;          
}

表达式应该测试特殊字符的文件名,例如^&*!~ + =&lt;&gt;`等。 我错过了一些愚蠢的东西吗?

4 个答案:

答案 0 :(得分:6)

当你将正则表达式放入一个字符串时(比如使用“new RegEx()”而不是/.../表示法),正则表达式字符串必须改变。为什么?因为它现在将被解析两次而不是一次:首先,作为字符串 - 这意味着在字符串常量内发生的所有正常反斜杠处理将发生,其次,作为正则表达式。

答案 1 :(得分:1)

不想解析你丑陋的RE,我可以看到两个问题之一:

  1. 您的测试是倒退的。 test()调用将在上面的示例中返回false,这意味着它与“我”中的任何不良字符都不匹配,因此您将收到一条警告“无效字符”,这是向后的。

  2. 您的测试语法错误。请尝试使用正则表达式文字:

    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;