我有以下使用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但不确定如何实现。感谢任何帮助。
答案 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
,因此我们不会溢出到域部分并保留在用户名部分内。