我有一个密码字段,我需要使用JavaScript检查以下字符:
! @#$%^&*
我试图这样做,并且按预期工作:
displacements
有没有更简单/有效的方法来做到这一点?
答案 0 :(得分:2)
您可以使用正则表达式测试字符串:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
function isValid(str){
return !/[!@#$%^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}
答案 1 :(得分:0)
用于实现此目标的正则表达式为[!@#$%^&*]
这将检查您列出的所有特殊字符。要在函数中使用,可以使用match函数,如下所示:
public boolean isSpecialCharacter(String string) {
String pattern = "[!@#$%^&*]";
return string.matches(pattern);
}
答案 2 :(得分:0)
正则表达式将是一个不错的单行解决方案。但这实际上比indexOf慢(如您发布的代码)。在此处查看一些信息:https://jsperf.com/regexp-vs-indexof
正则表达式文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
function isValid(str){
return /[!@#$%^&*(),.?":{}|<>]/g.test(str);
}
此网站也非常适合测试正则表达式https://www.regextester.com/
答案 3 :(得分:0)
尽管这里的两个答案都可以解决问题,但仅出于演示目的,我将提交一种不使用RegEx的方法。也许我们并不总是需要使用正则表达式,即使是最简单的检查也是如此。而且这里的字符列表很短,另一种选择可能是:
let testString = 'abcd';// the string you are checking
let chars = '!@#$%^&*'.split('');// just a way to write your chars as an array
let isValid = chars.some((c) => testString.includes(c));// check if at least one of the chars is included in your string
不是真正的基准测试,但是我希望它很快,因为some
方法应该在找到正匹配项时尽快返回,includes
也应返回。
也许您将需要一些some
和includes
方法的polyfill或将箭头函数替换为常规函数,这取决于您要支持的浏览器类型,这只是演示一个想法。