正则表达式:不允许字符串以特殊字符开头或结尾,且不能有连续的特殊字符。

9

我想在我的应用程序中设置密码。密码不应以特殊字符开头和结尾,但是可以在字符串之间添加特殊字符。密码中可能包含特殊字符,但不应连续出现两个特殊字符。这里有一个正则表达式,它不允许用户使用特殊字符作为字符串的起始字符和结束字符。

var string='877sswere';
var a= RegExp(/^[a-zA-Z0-9](.*[a-zA-Z0-9])?$/).test(string);
console.log(a);

所以,我的需求是:
string='877sswere' -> Correct
string='@877sswere' -> In Correct
string='!877sswere^' -> In Correct
string='877sswere$' -> In Correct
string='8&*77sswere' -> In Correct
string='87#7ssw$er^e' -> Correct
string='877^sswere' -> Correct

所以,有人能向我建议如何做到这一点吗?非常感谢任何帮助。提前致谢。

所以 877^$%@sswere 是不被允许的。 - skamazin
停止限制密码,这会导致糟糕的用户体验。受限制的密码会导致使用懒惰、不安全的密码。 - Jay Blanchard
1
请在问题中不包含关于该插件的内容时,不要使用标签[tag:jquery-validate]。我这里也看不到任何关于标签 [tag:jquery] 的代码。 - Sparky
@ Sparky:抱歉,我会将其删除。 - jeeva
1个回答

10

这个正则表达式应该可以工作:

/^[a-z0-9](?!.*?[^\na-z0-9]{2}).*?[a-z0-9]$/gmi

正则表达式演示


它不能处理单个字符输入,例如a。但是对于多个字符输入,它的工作非常出色。您能否建议如何修改以匹配单个字符? - Himanshu Sharma
正则表达式可以进行调整,以允许1个字符的输入,但是密码长度为1并不常见。 - anubhava
3
@HimanshuSharma:如果要允许输入1个字符,请使用以下正则表达式:/^(?!.*[^\na-z0-9]{2})(?=.*[a-z0-9]$)[a-z0-9].*$/gim - anubhava
1
@anubhava 感谢您挽救了我的一天!实际上,我正在使用这种模式进行输入验证,其中我需要验证单个字符的输入。 - Himanshu Sharma
@anubhava 谢谢!你能帮我扩展“1个字符输入”版本吗?我需要一个只允许使用- _特殊字符的解决方案。例如:this-is_valid,this!is~not?valid。再次感谢!regex101.com/r/6kbdwR/1 - András Szabácsik
1
@AndrásSzabácsik:使用^(?!.*[-_]{2})(?=.*[a-z0-9]$)[a-z0-9][a-z0-9_-]*$或查看https://regex101.com/r/6kbdwR/2 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接