求判断字符串包含全部a-z字符的JavaScript语法方案
实现判断全字母句的函数
需求是写出一个isPangram函数,当输入字符串包含a到z所有英文字母时返回true,否则返回false。
先指出你现有写法里的几个问题:
- 第一个函数:JS字符串没有
contains方法,正确的是includes,但即使改成includes,也只是判断字符串里是否存在任意小写字母,无法验证所有字母都存在;而且正则表达式不能直接作为includes的参数,判断正则匹配应该用RegExp.test()方法。 - 第二个函数:
string.matchAll(/[a-z]/)后面少了闭合括号,语法错误;另外matchAll返回的是匹配结果的迭代器,只要有匹配就会被视为真值,但同样无法确认所有字母都存在。 - 第三个函数:
string[i] = /[a-z]/是赋值操作而非比较,应该用===或正则test;而且循环第一次就直接返回结果,逻辑错误,无法检查所有字母。
下面是几种正确的实现思路和语法:
方法1:利用Set去重验证
function isPangram(string) { // 提取所有字母并转小写,存入Set自动去重 const uniqueLetters = new Set(string.toLowerCase().match(/[a-z]/g)); // 若集合大小为26,说明包含所有a-z字母 return uniqueLetters.size === 26; }
方法2:遍历a-z逐一检查
function isPangram(string) { const lowerStr = string.toLowerCase(); // 遍历a到z的ASCII码范围(97对应a,122对应z) for (let code = 97; code <= 122; code++) { const char = String.fromCharCode(code); // 只要有一个字母不存在就返回false if (!lowerStr.includes(char)) { return false; } } // 所有字母都存在则返回true return true; }
方法3:正则正向预查验证
function isPangram(string) { // 用不区分大小写的正则,通过正向预查验证每个字母是否存在 return /(?=.*a)(?=.*b)(?=.*c)(?=.*d)(?=.*e)(?=.*f)(?=.*g)(?=.*h)(?=.*i)(?=.*j)(?=.*k)(?=.*l)(?=.*m)(?=.*n)(?=.*o)(?=.*p)(?=.*q)(?=.*r)(?=.*s)(?=.*t)(?=.*u)(?=.*v)(?=.*w)(?=.*x)(?=.*y)(?=.*z)/i.test(string); }
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

