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