сбой JavaScript - ошибка регулярного выражения - PullRequest
0 голосов
/ 10 ноября 2010

Привет всем

У меня есть этот код

function prototype( str , id )
{
    var ret = str;

    ret = ret.replace( /ø/g, 'oe' );
    ret = ret.replace( /Ø/g, 'OE' );
    ret = ret.replace( /å/g, 'aa' );
    ret = ret.replace( /Å/g, 'AA' );
    ret = ret.replace( /æ/g, 'ae' );
    ret = ret.replace( /Æ/g, 'AE' );

    document.getElementById( id ).value = ret.replace(/[^a-zA-Z0-9\/\_-]/i,'_').replace(/_+/g,'_');
}

Моя проблема сейчас, если я использую слово, подобное этому (demo demo demo), все в порядке, сделайте это слово для (demo_demo demo))

я использую эту функцию для экранирования URL.затем мне нужно его отправить его в нижнем регистре, после того, как я закончил, я надеюсь на помощь:)

много танков все.

Ответы [ 4 ]

2 голосов
/ 10 ноября 2010

Если проблема состоит в том, что только первый пробел заменяется на _, тогда вам нужно поставить параметр g в регулярное выражение заменить.

ret.replace(/[^a-zA-Z0-9\/\_-]/gi,'_')

чтобы перевести строку в нижний регистр, используйте

toLowerCase() метод строк.

2 голосов
/ 10 ноября 2010

Вы забыли жадный модификатор

/[^a-zA-Z0-9\/\_-]/i

....

/[^a-zA-Z0-9\/\_-]/ig
1 голос
/ 10 ноября 2010

Предполагая, что вашим первым требованием является замена пробела, +, - символов подчеркиванием,

document.getElementById( id ).value = ret.replace(/[^a-zA-Z0-9\/\_-]/ig,'_').replace(/_+/ig,'_');

Другое требование состоит в том, чтобы сделать строчную строку

document.getElementById( id ).value = document.getElementById( id ).value.toLowerCase();
0 голосов
/ 10 ноября 2010

Основная потенциальная проблема, которую я вижу, связана с первой заменой (на Ø и других скандинавских символах).

Вы должны измениться с представлением символов в юникоде, например это утверждение

ret = ret.replace( /Ø/g, 'OE' );

должно быть

ret = ret.replace( /\u0153/g, 'OE' );

для других диакритических знаков просто найдите таблицу в юникоде, как http://www.chucke.com/entities.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...