perl正则表达式模式在PHP中工作,但不是在JavaScript中?

时间:2011-08-14 06:40:37

标签: php javascript jquery regex json

我有一个CMS应用程序,允许添加自定义字段。一种类型的自定义字段是用户文本输入框。创建此字段类型时,您还可以提供perl正则表达式以在preg_match php函数中使用,以验证此字段的用户输入。

现在我正在设置管理数据的新方法,其中包含许多前端jquery的功能,我遇到了这个问题。当动态生成表单(ajax / php)时,还会组装JSON字符串并将其与动态表单HTML一起添加到ajax repsonse数据中。接收javascript函数绘制html并解析包含字段信息的JSON字符串(它是什么类型的字段:text或select以及每个字段的其他字段选项。然后将此JSON对象附加到jQuery数据( )表单#submitButton的方法。

当用户提交表单时,循环按钮的data()键以访问有关应检查哪个表单id进行输入验证的信息,即selectindex不能为零,文本字段必须根据提供的正则表达式模式进行验证

我为PHP结尾提供的正则表达式模式是:/^([A-Za-z0-9 .\-']*)$/这在php中运行得很好,我所描述的其余部分也很好用。我的问题是我真的不擅长正则表达式而且我不理解为什么这个模式在php中通过preg_match正确匹配,但是在javascript中使用string.match(pattern);每次都失败,无论我给出什么输入它

以下是一段代码:

var checklist = $('#ficb1').data(); // gets data() object.
var errors = new Array();
for(var key in checklist) { // loop through data() keys

        // verify text field
        if(checklist[key]["type"] == "text") { // do the following for text fields
            if(checklist[key]["options"]) { // checks if a pattern is set
                // found pattern! regex check!
                var pattern = checklist[key]["options"]; // verfied value: /^([A-Za-z0-9 .\-']*)$/
                var valstr = $('#'+key).val(); // key = id of field being checked without # sign valstr varified to hold the value of the input text.
                if(!valstr.match(pattern)) {
                                            // add error message to error array - regex match not found.
                    var engkey = key.replace('_', ' ');
                    errors.push(ucfirst(engkey.substr(1)) + ' did not match the required pattern ('+pattern+').');
                }
            }
        }

}

无论我输入什么内容,该函数最终会将该文本添加到错误错误中,即使我输入“hello”时也没有引号,这应该匹配该正则表达式...

对于冗长的解释感到抱歉,这个正则表达式匹配我做错了什么?

1 个答案:

答案 0 :(得分:3)

我猜你的正则表达式是这样的字符串:

"/^([A-Za-z0-9 .\-']*)$/"

这不会作为正则表达式。在将其插入JavaScript之前,请尝试删除前导和尾部斜杠。

打开你的JavaScript控制台,看看它有什么作用,看看一些斜杠可以带来的区别:

var pat = "^([A-Za-z0-9 .\\-']*)$";
console.log('pancakes'.match(pat));
console.log('pancakes'.match(new RegExp(pat)));
console.log('pancakes'.match(/^([A-Za-z0-9 .\-']*)$/));

var pat2 = "/^([A-Za-z0-9 .\\-']*)$/";
console.log('pancakes'.match(pat2));
console.log('pancakes'.match(new RegExp(pat2)));

或者到这里:http://jsfiddle.net/ambiguous/7FPux/