我有以下输入表单控件:
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;符号。 什么是正确的正则表达式?
答案 0 :(得分:1)
正则表达式的问题在于您在方括号(字符集)中使用!-@
。正则表达式认为你试图说“匹配char !
和char @
之间的所有字符”(字符代码33 - 64),而不是“使用[! - @]”。将hypen放在字符集的开头或结尾处,或者用反斜杠转义它。
另见http://www.regular-expressions.info/charclass.html
在大多数正则表达式中,字符类中唯一的特殊字符或元字符是结束括号,反斜杠\,插入符号^和连字符 - 。
基本上,你必须将连字符放在无效的地方或逃避它们。
您还可以在http://regexr.com/输入正则表达式以获取正则表达式语法突出显示 - 它会使错误变得非常明显,因为连字符的颜色不同。