【问题标题】:Angular Email validation for empty and pattern空和模式的角度电子邮件验证
【发布时间】:2018-02-06 17:18:49
【问题描述】:

我正在评估电子邮件输入是否为空,或者它是否不正确。如果是这样,则 emailError 的值为 true,并且不会执行进一步的代码

if(typeof($rootScope.email) === 'undefined' || /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test($scope.email)){
        $scope.emailError = true;
    }

它评估空输入,但没有正确检查模式。 我哪里做错了?

编辑: html 部分如下所示:

<input ng-class="{true:'error-bron', false:'nonerror-bron'}[emailError===true]" ng-if="$root.lang ==='en'" type="email" maxlength="40"  required class="bron-input" placeholder="Email" ng-model="$root.email"/>

如果所有字段都有效,则它开始工作:

if(!$scope.nameError && !$scope.emailError && !$scope.phoneError){

如果我将模式验证放在 html 中,那么它第一次会检查它,但在提交表单并且用户决定再次打开弹出窗口之后,这些值最初是有效的,用户甚至可以发送一个空的电子邮件。因此,为什么我想在用户按下提交按钮时执行的这个函数中检查它。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    也许做这样的事情:

    if(typeof($rootScope.email) === 'undefined' || !(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test($scope.email))){
            $scope.emailError = true;
    }
    

    【讨论】:

    • 感谢您提供新模式,但故障一定出在其他地方,因为在当前形式下,它甚至没有通过按提交时的功能
    【解决方案2】:

    试试这个:-

    <input type="email" name="email" ng-model="email" ng-maxlength="100" ng-model-options="{ updateOn: blur }" ng-pattern = '/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i' required />
    

    【讨论】:

    • 谢谢。我确实尝试从 html 检查模式,但如果我这样做,它会检查一次模式,但如果用户再次打开带有表单的弹出窗口(不刷新整个页面),那么这些值将设置为有效。在用户按下提交时执行的函数结束时,我确实将所有值设置为空,我什至尝试添加触摸的值。但这也无济于事。 $rootScope.email = ""; $rootScope.email.$touched = true;
    • 您正在寻找另一种逻辑,所以请向我提供整个逻辑以尝试帮助您.. 谢谢
    猜你喜欢
    • 2021-02-16
    • 2015-02-25
    • 2021-12-06
    • 1970-01-01
    • 2016-09-21
    • 2019-01-23
    • 2020-08-14
    • 2021-01-15
    • 2018-11-29
    相关资源
    最近更新 更多