查找所有实例并显示警报 - 第2部分,现在使用正则表达式

时间:2014-02-04 19:20:39

标签: javascript regex

感谢您对我之前提问的帮助:

How to find all instances and display in alert

现在我发现我需要包含一些无效的字符验证。

我正在试图弄清楚如何在验证过程中包含一组正则表达式无效字符,这些字符也会显示在同一警报/文本框/“太长/太短”验证中。

所以,我有一个文本框,用户可以输入或粘贴逗号分隔值,例如AAAAAAA,BBBBBBB,CCCCCCCC,DDDDDDDD

它们长度不能超过或少于七个字符,它们只能包含某些字符。

我目前有两个单独的Javascript片段,我现在要尝试合并:

var Invalidchars = "1234567890!@#$%^&*()+=[]\\\';./{}|\":<>?";
for (var i = 0; i < document.getElementById("TextBox1").value.length; i++) {
   if (Invalidchars.indexOf(document.getElementById("TextBox").value.charAt(i)) != -1){
   alert

和这个

var val = document.getElementById("Textbox1").value,
    err = $.grep(val.split(','), function(a) { return a.length != 7; });
if (err.length) {
    alert("All entries must be seven (7) characters in length.  Please correct the following entries: \n" + err);
    return false; 
}
return true; 

非常感谢任何帮助!

=============================================== ==

解 花了一段时间,但是使用Tenub的代码(它没有完全结合我的两套代码,但足够接近),我终于想出了如何将我的两组代码合并为一组。如果有人对使用它感兴趣,这是代码:

var val = document.getElementById("TextBox1").value,
    err = $.grep(val.split(','), function(a) {return (a.length = (!/^[^0-9!@#$%^&*()+=;.\/\{}|:<>\\?\[\]\'\"]{7}$/.test(a)));});
if (err.length){   
    document.getElementById("DIV1").style.display = "inline-block";
    document.getElementById("TextBox2").value = err.join(',');
        return callback (false);
    }
document.getElementById("DIV1").style.display = "none";
return true; 

2 个答案:

答案 0 :(得分:0)

答案很简单:

var val = document.getElementById("Textbox1").value;
if(!/[^0-9!@#$%^&*()+=;./{}|:<>?\[\]\\\'\"]{7}/.test(val)) {
    // handle invalid value
}

这测试字符串的长度是7个字符,并且在“^”之后的括号内包含任何字符(还有一些字符用“\”转义)。

您可以在控制台中进行测试:

/[^0-9!@#$%^&*()+=;./{}|:<>?\[\]\\\'\"]{7}/.test('adfFDKZ'); // returns true
/[^0-9!@#$%^&*()+=;./{}|:<>?\[\]\\\'\"]{7}/.test('adf(DKZ'); // returns false

答案 1 :(得分:0)

试试这个:

/* 
 * This regex matches all the invalid characters. I escaped the
 * special characters.
 */
var regex = /.*[0-9!@#\$%\^&\*\(\)\+=\[\]\\';\./\{\}\|":\<\>\?]+.*/;

var text = document.getElementById("TextBox1").value;

/* Test for match...much faster than a for-loop under any circumstances */
if (text.matches(regex)) {
  alert("Invalid characters present. Please correct the input");
  return false;
}

/* split on delimiter */
var err = $.grep(val.split(','), function(a) { return a.length != 7; });
if (err.length) {
  alert("All entries must be seven (7) characters in length.  Please correct the following entries: \n" + err);
  return false;
}

请告诉我这是否有任何错误。此外,一步测试的唯一真正方法是设置一个非常长的正则表达式。此外,只需一次检查,就会引导用户进行正确的校正。我会提到这一点。