输入文本的ng-pattern

时间:2017-09-04 15:35:18

标签: angularjs regex input ng-pattern

我有以下输入表单控件:

input.form-control(
    ng-model='controller.password'
    ng-minlength='1'
    ng-maxlength='8'
    name='password'
    type="{{ controller.passwordShowType }}"
    ng-pattern='controller.PASSWORD'
    required
)
控制器中的

PASSWORD = /^[A-Za-z0-9!-@#$%^&*()+<>]{1,8}$/;

对于此输入,我只想允许这些符号:

 'abcdefghijklmnopqrstuvwxyz!@#$%^&*()-+<>ABCDEFGHIJKLMNOP1234567890'

但如果我使用上面的正则表达式,我可以输入&#39;,&#39;或&#39;。&#39;符号。 什么是正确的正则表达式?

1 个答案:

答案 0 :(得分:1)

正则表达式的问题在于您在方括号(字符集)中使用!-@。正则表达式认为你试图说“匹配char !和char @之间的所有字符”(字符代码33 - 64),而不是“使用[! - @]”。将hypen放在字符集的开头或结尾处,或者用反斜杠转义它。

另见http://www.regular-expressions.info/charclass.html

  

在大多数正则表达式中,字符类中唯一的特殊字符或元字符是结束括号,反斜杠\,插入符号^和连字符 - 。

基本上,你必须将连字符放在无效的地方或逃避它们。

您还可以在http://regexr.com/输入正则表达式以获取正则表达式语法突出显示 - 它会使错误变得非常明显,因为连字符的颜色不同。