从JSON绑定ng-pattern值

时间:2013-12-09 08:55:04

标签: regex json angularjs

我正在解析JSON配置并创建表单。

"fields":[
            {
               "field_template" : "first_name",
               "display_name" : "First name",
               "pattern" : ""
            },
            {
               "field_template" : "date_of_birth",
               "display_name" : "Date of birth",
               "pattern" : ""
            },
...
]

我用这段代码读了json:

$http.get('fields.json').success(function(result) {
              $scope.fields = result.fields;
 });

在视图中渲染字段:

<div class="control-group" ng-repeat="f in fields">
            <label class="control-label" for="input">{{f['display_name']}}</label>
            <div class="controls">
              <input type="text" id="input" name="{{f['field_template']}}" ng-pattern="f['pattern']" ng-model="f['field_template']" class="input-xlarge">
            </div>
          </div>

我需要的是通用正则表达式,它匹配任何字符串的名字和正则表达式的日期,可以从json读取。

如果我离开“模式”:“”balnk,它会报告: 错误:预期f.pattern为RegExp,但为Pa / e

请参阅此处http://jsfiddle.net/894bb/6/

如果我把正则表达式:

^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$

到处都是为了举例说明:

Error: JSON.parse: bad escaped character

请参阅此处http://jsfiddle.net/894bb/7/

当从json读取时,如何将匹配所有字符串的正则表达式放在诸如名字之类的字段上以及如何修改不报告错误的日期的正则表达式?

2 个答案:

答案 0 :(得分:2)

你可以尝试通过在加载时循环你的值来为每个字段创建一个javascript RegExp

我在这里做了一点小提琴:http://jsfiddle.net/DotDotDot/g5tY7/
在get()之后,我只是循环每个值然后执行:

        for(var i in $scope.fields){
            $scope.fields[i].pattern=new RegExp($scope.fields[i].pattern);
        }

这将使用JSON中的文本创建JS RegExp,从而避免任何错误

希望这有帮助

++

小编辑:如果你想让模式正常工作,不要忘记逃避其中的所有“\”,你的日期模式应该是:

^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d$    

答案 1 :(得分:0)

  

当从json [2]读取时,如何将匹配所有字符串 [1] 的正则表达式放在诸如名字之类的字段上以及如何修改不报告错误的日期的正则表达式

[1]

匹配所有字符串的正则表达式是.*

[2]

问题是单\。将其替换为双\\