AngularJS标记中的单引号

时间:2016-02-19 11:11:23

标签: javascript html angularjs regex

我有以下使用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>

从上面可以看出我正在使用以下正则表达式: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,}))$/'

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

1 个答案:

答案 0 :(得分:2)

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

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,因此我们不会溢出到域部分并保留在用户名部分内。