Четыре мысли.
1) Я бы использовал явные регулярные выражения, где это целесообразно, вместо модификаторов. Будьте осторожны с квантификатором *
, так как он может допустить слишком много, , включая отсутствие значения !!!
if (/^[A-Za-z0-9]*$/.test(value)) {
}
2) Внимательно изучите определение Array.protoype.split () и что произойдет, когда вы используете пустую строку в качестве разделителя.
Внимание: если в качестве разделителя используется пустая строка (""),
строка не разделяется между каждым воспринимаемым пользователем символом (графема
кластера) или между каждым символом Unicode (кодовой точкой), но между
каждый кодовый блок UTF-16. Это уничтожает суррогатные пары. Смотрите также Как сделать
вы получаете строку в массив символов в JavaScript? в стеке потока.
3) Может ли .trim()
быть вам здесь полезен?
value.trim().split('').filter(function(el){ return el != '' })
4) Попробуйте изменить предикат фильтра (метод обратного вызова).
value.trim().split('').filter(function(element){ return /^[A-Za-z0-9]{1}$/.test(element) }
Тем не менее, изучите значение разделения на пустую строку и узнайте кодировку исходных строк. Поскольку вы фильтруете, вам не нужно заменять перед фильтрацией. Одной фильтрации должно быть достаточно. Вы хотите внести в белый список требуемые значения, поскольку внесение в черный список путем замены неизбежно приведет к неприятностям.
Stackoverflow: как получить строку в массив символов в JavaScript?