正则表达式不适用于数据绑定

时间:2017-06-05 21:18:24

标签: angularjs regex data-binding

我正在使用Angular进行验证,

<div ng-if="field.required !== 'true'">
   <input id="fld-{{field.id}}" name="{{field.id}}" ng-model="$ctrl.configuration[$ctrl.selectedPlatform][field.id]" ng-pattern="{{field.regex}}">
</div>

这是字段数据:

{
  "id": "addItemToHistoryAfterNSeconds",
  "label": "Add Video to History after how many seconds?",
  "type": "string",
  "default": "5",
  "regex": "/^[+]?([0-9]+(?:[\\.][0-9]*)?|\\.[0-9]+)$/"
}

所以这基本上匹配数值,用于测试目的。

但是,验证未通过,显示ng-invalid。

当我直接写ng-patter="/^[+]?([0-9]+(?:[\\.][0-9]*)?|\\.[0-9]+)$/"时,验证通过。

任何人都知道为什么?

更新:

我想只对数值有效,所以我将使用:

/^[+]?([0-9]+(?:[\\.][0-9]*)?|\\.[0-9]+)$/

1 个答案:

答案 0 :(得分:1)

HTML和JS代码中如何定义正则表达式之间存在差异。如果ng-pattern允许您使用带有单个反斜杠的"/regex-here/"表示法来表示文字反斜杠,那么JS代码就不会像使用C字符串那样定义字符串(即,您可以使用转义序列的字符串文字)。< / p>

在那里,您可以使用构造函数初始化(使用字符串)或正则表达式文字。

请记住,您需要在字符串文字中使用双反斜杠,并在正则表达式文字中使用单个反斜杠来表示文字反斜杠(正则表达式转义所需)。

"regex": "^\\+?([0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)$"
"regex": /^\+?([0-9]+(?:\.[0-9]*)?|\.[0-9]+)$/

应该有用。