我有以下两种模式:
https://codepen.io/anon/pen/OdZaBe
/^(?=.*[A-Za-z])(?=.*\d)(?=.*[!#$%\-_=+<>])[A-Za-z\d!#$%\-_=+<>]/;
https://codepen.io/anon/pen/ErLOOw
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!#$%\-_=+<>]/
模式1需要字母/数字/特殊字符,模式2仅需要数字和字符。
我想为此添加一种模式,以禁用任何空格或完整的字符串:(?!\s*$)[\s\S]+$
我尝试了
/^(?=.*[A-Za-z])(?=.\S*$)(?=.*\d)[A-Za-z\d!#$%\-_=+<>]/;
/^(?=.*[A-Za-z])(?=.(?!\s*$)[\s\S]+$)(?=.*\d)[A-Za-z\d!#$%\-_=+<>]/;
但是它不起作用。
结束结果将是
模式1要求至少1个字母/数字/特殊字符,并且不允许任何空格
模式2至少需要1个数字和字符,并且不允许任何空格
答案 0 :(得分:1)
两个模式本身都不匹配空格。参见https://regex101.com/r/FaQhfD/1 和https://regex101.com/r/IWWhSp/1
但是在您的代码中,您必须使用量词在结尾处重复字符类,并在不使用锚点$
的情况下声明字符串的结尾:
$scope.thing = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!#$%\-_=+<>]+$/;
和:
$scope.thing = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[!#$%\-_=+<>])[A-Za-z\d!#$%\-_=+<>]+$/;
要防止最后输入空格,可以使用ng-trim="false"
,请参见ngTrim:
<input type="text" ng-model="something" ng-pattern="thing" ng-trim="false" />