Regex - Недопустимый символ вывода - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь создать функцию, которая проверяет, является ли поле действительным на основе набора символов и, если нет, выводит, какие из них не допускаются .Не знаю, является ли это лучшим подходом, но в основном вместо того, чтобы сообщать пользователю, какие из них он может использовать, я хочу сказать, какие из них он не может.

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

Ответы [ 3 ]

0 голосов
/ 05 апреля 2019

Используя свой набор символов в регулярном выражении, вы можете удалить все эти символы из строки, и в результате будут недопустимые символы. Попробуйте это 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 параметр в функции обратно на ваш исходный код.

0 голосов
/ 05 апреля 2019

Я бы поменял тест: есть ли в строке недопустимый символ?

Позаботьтесь, чтобы вы избежали черты в классе персонажей, за исключением первой и последней позиции.

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'));
0 голосов
/ 05 апреля 2019

Вы можете разбить строку и обращаться с ней как с массивом (хотя не уверен насчет производительности).

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('');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...