【问题标题】:Single quotes in AngularJS tagAngularJS标签中的单引号
【发布时间】:2023-03-22 11:01:02
【问题描述】:

我有以下使用 ng-pattern 指令的电子邮件验证代码。我需要在错误验证中包含单引号,例如: asd'f@dfs.com 失败。我不想使用默认的 angular 指令,因为后续的 ..(点)、^、逗号等不适合

<input type="email" name="username" placeholder="jasdf@asdf.com" ng-model="user.username" ng-maxlength="100" ng-model-options="{ updateOn: blur }" ng-pattern='/^(([^<>()\[\]\\.\,;:\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,}))$/' required />
        <div class="error-container" ng-show="userForm.username.$dirty && userForm.username.$error">
          <small class="error" ng-show="userForm.username.$error.required">
               Your email is required.
        </small>
          <small class="error" ng-show="userForm.username.$error.pattern">
               Please input a valid email.
        </small>
          <small class="error" ng-show="userForm.username.$error.maxlength">
              Your email cannot be longer than 100 characters
        </small>

从上面可以看出我使用的是下面的Regex:ng-pattern='/^(([^&lt;&gt;()\[\]\\.\,;:\s@"]+(\.[^&lt;&gt;()\[\]\\.,;^:\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,}))$/'

我的问题是如何在正则表达式中包含单引号 (') 以便它不会与 ng-pattern 标签引号和 (^) 冲突。我四处搜索,似乎我应该使用 &apos 但不确定如何实现。感谢任何帮助。

【问题讨论】:

标签: javascript html angularjs regex


【解决方案1】:

你可以使用这个稍微缩短的版本:

ng-pattern="/^(([^<>()\[\]\\.,;:\s@^\x22\x27]+(\.[^<>()\[\]\\.,;^:\s@\x22\x27]+)*)|(\x22[^‌​@‌​]+\x22))@((\[[0-9]{1,3}(\.[0-9]{1,3}){3}])|(([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}))$/"

这里是regex demo

变化是:

  • 三个\.[0-9]{1,3} 被收缩,因为它被重复3 次到(\.[0-9]{1,3}){3}
  • 第一个和第二个否定字符类现在包含 \x27 (') 和 \x22 (") 符号
  • 还在第一个否定字符类中添加了^
  • \x22.+\x22 变成了\x22[^‌​@‌​]+\x22,这样我们就不会溢出到域部分并留在用户名部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2018-05-23
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多