gpt4 book ai didi

regex - Angular ng-pattern 不检查正则表达式的字符上限

转载 作者:行者123 更新时间:2023-12-02 03:30:41 24 4
gpt4 key购买 nike

我刚刚开始使用一些我在非 Angular 项目中使用过的正则表达式来测试 ng-pattern,并且运行良好。但使用 ng-pattern 似乎不起作用。例如,我有一个正则表达式,可以成功检查 6-20 个字符的字符串,其中至少有 1 个字母字符和 1 个数字字符:

"^.*(?=.{6,20})(?=.*\d)(?=.*[a-zA-Z]).*$"

但是,在下面的 Angular 示例中,它会成功检查所有内容,但当字符串超过 20 个字符时不会触发它:

<div class="controls">
<input type="text" ng-model="user.Password" id="Password" name="Password" title="Password" required ng-pattern="^/.*(?=.{6,20})(?=.*\d)(?=.*[a-zA-Z]).*$/" />
<span ng-show="form.Password.$dirty && form.Password.$error.required">{{'_PasswordRequired_' | i18n}}</span>
<span ng-show="form.Password.$dirty && form.Password.$error.pattern">{{'_PasswordLengthAndAlphanumeric_' | i18n}}</span>
</div>

我在语法中是否犯了一些错误,或者是否有其他原因导致这不起作用?

最佳答案

您缺少一个结束 anchor ,并且您有一个 .* 太多(在开始处):

^             # Start of string
.* # Match *any* number of characters
(?=.{6,20}) # *Then* check that 6-20 characters follow
<snip>
.* # *Then* match any number of characters anyway
$ # until the end of the string

这会起作用:

"^(?=.{6,20}$)(?=.*\d)(?=.*[a-zA-Z]).*$"

但无论如何,在前瞻之外进行长度检查会更容易(也更明显):

"^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$"

(这又让我问为什么你们要施加如此低的上限?例如,我的 KeePass 生成的密码长度通常至少为 30 个字符)

关于regex - Angular ng-pattern 不检查正则表达式的字符上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17612950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com