输入文本的 ng-pattern

ng-pattern for input text

我有以下输入表单控件:

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'

但是如果我像上面那样使用我的正则表达式,我可以输入','或'.'符号。 这个工作的正确正则表达式是什么?

您的正则表达式的问题是您在方括号(字符集)内使用了 !-@。正则表达式认为您要说的是 "match all chars between char ! and char @"(字符代码 33 - 64),而不是 "use on of [!-@]"。将连字符放在字符集的开头或结尾,或使用反斜杠将其转义。

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

In most regex flavors, the only special characters or metacharacters inside a character class are the closing bracket ], the backslash \, the caret ^, and the hyphen -.

基本上,您必须将连字符放在无效的地方或将其转义。

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