当前位置: 首页 > 知识库问答 >
问题:

Angularjs动态ng模式验证

夏学名
2023-03-14

我有一个表单,如果复选框为false,则使用ng必需指令对文本输入进行验证。如果复选框为true,则该字段将被隐藏并且ng必需设置为false。

问题是,我在输入上还指定了一个用于验证的正则表达式,并且使用了ng模式角度指令。我遇到的问题是,如果用户填写了无效的电话号码,请选中该框以停用该输入(因此无需进一步验证),表单将不允许提交,因为它基于ng模式无效。

我试图通过添加一个ng change函数来解决这个问题,将输入模型设置为null,但是ng模式和字段在复选框的初始设置为false时仍然设置为invalid。但是,如果我取消选中该框,将所有内容设置回初始表单加载,然后再次选中该框,则该表单有效并且可以提交。我不确定我错过了什么。以下是我目前掌握的ng变更代码:

    var phoneNumberRegex = /^\(?(\d{3})\)?[ .-]?(\d{3})[ .-]?(\d{4})$/;
    $scope.phoneNumberPattern = phoneNumberRegex;
    $scope.removeValidation = function() {
        if ($scope.cell._newUser === false) {
            $scope.request._number = '';
            $scope.phoneNumberPattern = /[0-9a-zA-Z]?/;
        } else {
            $scope.phoneNumberPattern = phoneNumberRegex;
        }
    };

共有3个答案

潘宸
2023-03-14

使用的模式:

 ng-pattern="/^\d{0,9}(\.\d{1,9})?$/"

使用的参考文件:

 '<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.js"></script>'

输入示例

 <input type="number" require ng-pattern="/^\d{0,9}(\.\d{1,9})?$/"><input type="submit">
元英朗
2023-03-14

不要从尼科斯精彩的回答中拿走任何东西,也许你可以做得更简单:

<form name="telForm">
  <input name="cb" type='checkbox' data-ng-modal='requireTel'>
  <input name="tel" type="text" ng-model="..." ng-if='requireTel' ng-pattern="phoneNumberPattern" required/>
  <button type="submit" ng-disabled="telForm.$invalid || telForm.$pristine">Submit</button>
</form>

注意第二个输入:我们可以使用ng if来控制表单中的呈现和验证。如果requireTel变量未设置,第二个输入不仅会被隐藏,而且根本不会呈现,因此表单将通过验证,按钮将被启用,您将获得所需的内容。

司马祖鹤
2023-03-14

这是一个有趣的问题,复杂的角度验证。以下小提琴实现了您想要的功能

http://jsfiddle.net/2G8gA/1/

我创建了一个新的指令,rpattern,它是Angular的所需ng和来自输入[类型=文本]的ng模式的混合。它所做的是观察字段的“必需”属性,并在使用regexp进行验证时将其考虑在内,即如果不需要,则将字段标记为有效模式。

  • 大部分代码都是从角度出发的,是根据这个需求定制的

如果不需要新的指令,脏的(但较小的)解决方案如下:

$scope.phoneNumberPattern = (function() {
    var regexp = /^\(?(\d{3})\)?[ .-]?(\d{3})[ .-]?(\d{4})$/;
    return {
        test: function(value) {
            if( $scope.requireTel === false ) {
                return true;
            }
            return regexp.test(value);
        }
    };
})();

在超文本标记语言中,不需要更改:

<input type="text" ng-model="..." ng-required="requireTel"
    ng-pattern="phoneNumberPattern" />

这实际上欺骗了angular调用我们的test()方法,而不是RegExp。test(),将所需的代码考虑在内。

 类似资料:
  • 问题内容: 我有一种形式,如果复选框为false,则使用ng-required指令对文本输入强制执行验证。如果复选框为true,则该字段被隐藏,并且ng- required设置为false。 问题是我还使用ng-pattern angular指令在输入上指定了用于验证的正则表达式。我遇到的问题是,如果用户填写了无效的电话号码,请选中该框以停用该输入(因此无需进一步验证),则该表单将不允许提交,因为

  • 问题内容: 我有一个AngularJS表单,我在其中使用ng-repeat根据另一个选择动态地构建表单的字段。我正在尝试动态生成模型名称,并且遇到了问题。 我需要的是评估为ng-model =“ formData.parameters.fooId”或ng-model =“ formData.parameters.barId” 上面的结果导致错误:错误:[$ parse:syntax]语法错误:标记

  • 问题内容: 对于我正在编写的指令的需要,我必须动态构造ng-options表达式。这是我尝试过的。 在我的指令中: 在我的html模板中: 这将导致ng-options使用正确的表达式“列表中l的l.name”,但不会显示选项。 拜托,有什么主意吗? 问题答案: 更改您的代码,使其看起来像这样(使用javascript来选择您的媒体资源):

  • 我创建了一个min和max指令,用于检查输入是否在范围之间。我还有一个ng模式验证。我正在使用ng消息显示我的验证。我遇到一个问题,即即使用户输入了正确的模式,“模式”的验证消息仍在显示。我只想显示范围超出范围的验证。这是html 这里是指令 这是柱塞

  • 问题内容: 我正在尝试为Angular建立一个日托价格计算器。 公司专营权中的每个地点每天都有单独的价格。因此,我的想法是构建一个表单,首先选择一个允许您选择位置的表单,然后再选择一系列复选框。 我在从json文件中选择正确价格的复选框中遇到ng-true-value的问题。 更新: 添加了Plunkr:http : //plnkr.co/edit/MDmrqaH1VzLBzjd5eHgT?p=p

  • 问题内容: 我正在尝试从对象数组生成一组复选框。我的目标是使复选框动态地将其ng模型映射到将要提交到数组中的新对象的属性。 我的想法是 在此JSFiddle上可以看到,这不起作用: http://jsfiddle.net/GreenGeorge/NKjXB/2/ 有人可以帮忙吗? 问题答案: 这应该给您想要的结果: 这是工作正常的小伙伴:http ://plnkr.co/edit/ALHQtkji