2015-09-14 18 views
2

我想写一个REGEX来测试一个PANGRAM。我可以用传统方式来完成,但似乎无法用正则表达式来解决超过90%的测试结果。JavaScript Pangram正则表达式

输入:字符串

输出:true ||假

function isPangram(string){ 
    return ___________________.test(string) 
} 

目前为止的检测结果。

6/10 /([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, \s]+)/i

6/10 /[a-z]{1}/i

6/10 /[a-z]/i

6/10 /[a-z]+/i

9/10 /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 不仅没有反对abcdefghijklmopqrstuvwxyz

6/10 /[\w.]+/

任何帮助或建议,非常感谢。

+0

你可以给服务器进行测试吗? – Mritunjay

+0

所以你只是试图使用正则表达式来测试Pangram。这将是艰难的。 – Saif

+0

你只需要_something_来代替'___________________'或者其他的方法对你有用(就像我在下面的回答中)? – Tushar

回答

2

这将是挑战一个正确的答案:

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) 
} 

它采用向前看符号与每一个字母,以检查他们的地方传递的字符串中。

13
  1. 将字符串转换为小写
  2. 使用正则表达式从字符串中提取所有的独特的字母
  3. 检查,如果没有独特的字母是26

代码:

function isPangram(string) { 
    var regex = /([a-z])(?!.*\1)/g; 
    return (string.match(regex) || []).length === 26; 
} 

Regex101

var regex = /([a-z])(?!.*\1)/g; 
 

 
function check() { 
 
    var val = document.getElementById('text').value.toLowerCase(); 
 

 
    alert(val.match(regex).length == 26); 
 
}
<input type="text" id="text" /> 
 

 
<button onclick="check()">Check</button>

+0

检查问题 - 它提供了该功能的模板。所以你不能放任意的js,答案只能是一个正则表达式。 – zerkms

+0

从技术上讲,它仍不符合要求。挑战要求你只能替代'_______'部分而不要修改其他任何东西。 – zerkms

+0

这是一个很棒的方法,并且还通过了另一轮测试。但它没有通过:'AbCdEfGhIjKlM zYxWvUtSrQpOn'或'多快地傻跑跳斑马烦恼。' Tricky – Vontei