php - Perl 正则表达式模式在 php 中有效,但在 javascript 中无效?

标签 php javascript jquery regex json

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

现在我正在设置新的数据管理方式,其中包含大量前端 jquery 功能,但我遇到了这个问题。当动态生成表单(ajax/php)时,还会组装 JSON 字符串并将其与动态表单 HTML 一起添加到 ajax 响应数据中。接收 JavaScript 函数绘制 html 并解析包含字段信息的 JSON 字符串(字段类型:文本或选择以及每个字段存在的其他字段选项)。然后将该 JSON 对象附加到 jQuery 数据( ) 表单的#submitButton 方法。

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

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

这是一段代码:

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”,它应该与该正则表达式匹配...

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

最佳答案

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

"/^([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/

关于php - Perl 正则表达式模式在 php 中有效,但在 javascript 中无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055450/

相关文章:

javascript - removeAttr 部分工作

javascript - 输入字段 X 更改时启用输入字段 X+1

javascript - 没有任何 UI 框架的 PhoneGap 应用程序的自定义页面滑动过渡

javascript - 我可以对 div 使用 onmouseover 吗?

PHP - 加载所有动态内容后获取页面内容

php - 使用服务帐户向 Google API 进行身份验证时出现 failedPrecondition 错误

javascript - 如何更改 Highcharts 折线图中网格和 yAxis 之间的空间值

javascript - Angular 语法错误

php - 使用php将文件中的信息导入到mysql

javascript - 使用 javascript 或 jquery 通过 get 将数据从一种表单推送到另一种表单