正则表达式-输出字符无效

时间:2019-04-05 13:14:23

标签: javascript jquery regex

我正在尝试创建一个函数,以基于一组字符检查字段是否有效 ,如果不是,则输出不允许输入的字符。不知道这是否是最好的方法,但我基本上不是告诉用户可以使用哪些方法,而是要告诉他不能使用的方法。

function allowedString(field){
    var validCharacters = new RegExp('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ_-¿?¡!.,;:$() ]*$');
    if(!validCharacters.test(field.val())){
        var invalid = ?;
        return "Invalid characters: "+invalid;
    }
}

3 个答案:

答案 0 :(得分:0)

您可以拆分字符串并像处理数组一样对其进行处理(尽管不确定性能)。

function allowedString(field){
    const validCharacters = new RegExp('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ_-¿?¡!.,;:$() ]*$');
    const disallowed = field.val().split('').filter(x => !validCharacters.test(x));

    if (disallowed.length) {
        return disallowed.join('');
    }
}

答案 1 :(得分:0)

使用正则表达式中的字符集,可以从字符串中删除所有这些字符,结果将是不允许的字符。试试这个JS代码,

function allowedString(s){
    var validCharacters = new RegExp('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ_-¿?¡!.,;:$() ]*$');
    if(!validCharacters.test(s)){
        var invalid = s.replace(/[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ_-¿?¡!.,;:$() ]*/g,'');
        return "Invalid characters: "+invalid;
    } else {
        return "All characters are valid"; // return any message you want
    }

}


console.log(allowedString('aa@@bb##'));
console.log(allowedString('abc'));
console.log(allowedString('aa@@bb##~~^^'));

然后将函数中的field参数更改回原始代码。

答案 2 :(得分:0)

我撤消了测试:字符串中是否有无效字符?

请注意,除第一个和最后一个位置外,您必须在字符类中转义短划线。

function allowedString(field){
    var invalidCharacters =/([^a-zA-Z0-9áéíóúÁÉÍÓÚñÑ_\-¿?¡!.,;:$() ])/;
    invalid = invalidCharacters.exec(field);
    if (invalid != null) {
        return "Invalid characters: "+invalid[1];
    } else {
        return "OK";
    }
}
console.log(allowedString('abc'));
console.log(allowedString('abc@def'));
console.log(allowedString('abc§def'));