正则表达式不允许在开头和结尾使用空格

时间:2018-08-07 18:52:08

标签: javascript jquery regex

我有这个正则表达式:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,26})

密码必须遵守以下规则:

  1. 开头或结尾不能包含空格。
  2. 必须至少包含一个数字。
  3. 必须至少包含1个大写字母。
  4. 必须至少包含1个小写字母。
  5. 必须至少包含特殊字符(!@#$%^&*)。
  6. 必须至少8个字符,最大26个字符。

一切正常,但我不能在开头和结尾处都禁止使用空格。

有什么建议吗? 使用javascript正则表达式测试。.

3 个答案:

答案 0 :(得分:0)

您可以在开始/结束字符串定位点旁边使用否定的前瞻/后视来实现:

^(?!\s)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,26}(?<!\s)$

答案 1 :(得分:0)

您可以保留先行逻辑并添加缺少的条件,如下所示:

(?=\S)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,26})(?=.*\S$).*

(?= \ S)=>必须以非空格字符开头。

(?=。* \ S $)=>必须以非空格字符结尾。

答案 2 :(得分:0)

您可以添加一个额外的正向前行(?=\S.{6,24}\S$),以断言该字符串以非空白字符\S开始和结束,并更新量词以将字符数反映为{6,24}

如果您的密码只能包含在预行中使用的字符,而不是匹配所有字符(包括空格),则可以再次使用包含所有允许的字符的字符类。

您的正则表达式可能如下:

^(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=\S.{6,24}\S$)[a-zA-Z0-9!@#$%^&*]+$

请参见regex demo