向现有的正则表达式中添加另一个正则表达式

时间:2019-02-12 01:54:12

标签: regex ng-pattern

我有以下两种模式:

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个数字和字符,并且不允许任何空格

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" />

更新的代码笔示例:update 1update 2