我正在使用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]+)$/
答案 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]+)$/
应该有用。