Регулярное выражение для замены пробела тире в jQuery

у меня есть следующий код, который заполняет это поле при вводе в другую...

$('#title').bind('keyup keypress blur', function() 
{  

    var myStr = $(this).val()
        myStr=myStr.toLowerCase();
        myStr=myStr.replace(/ /g,"-");
        myStr=myStr.replace(/[^a-zA-Z0-9.]+/g,"");
        myStr=myStr.replace(/.+/g, "-");


    $('#filename').val(myStr); 
});

код работает для удаления любых буквенно-цифровых символов none, однако я хочу, чтобы он заменил пробелы тире" -".

Если я изменю тире на точку '."это работает, не знаете, почему и как это исправить? Регулярное выражение сбивает меня с толку.

JSFIDDLE здесь

может ли кто-нибудь указать мне справа направление?

обновление

просто получил его для работы по мере необходимости, используя это...

<script>
$('#title').bind('keyup keypress blur', function() 
{  

    var myStr = $(this).val()
        myStr=myStr.toLowerCase();
        myStr=myStr.replace(/[^a-zA-Z0-9 ]+/g,"");
        myStr=myStr.replace(/s+/g, "-");


    $('#filename').val(myStr); 
});
</script>

3 ответов


Я рекомендую использовать это регулярное выражение вместо первого у вас есть /(^\s+|[^a-zA-Z0-9 ]+|\s+$)/g. Это предотвратит добавление тире в начале и в конце строки, на случай, если пользователь случайно добавит пробелы.

$('#title').bind('keyup keypress blur', function() 
{  

    var myStr = $(this).val()
    myStr=myStr.toLowerCase();
    myStr=myStr.replace(/(^\s+|[^a-zA-Z0-9 ]+|\s+$)/g,"");   //this one
    myStr=myStr.replace(/\s+/g, "-");


    $('#filename').val(myStr); 
});

jsfiddle


\s означает whitespace (\n, \r, \t, \f, and " ") в регулярное выражение:

myStr=myStr.replace(/\s+/g, "-");

вы разрушаете свою собственную работу с этим:

myStr=myStr.replace(/[^a-zA-Z0-9\.]+/g,""); //removes dashes (-)

измените его на это:

myStr=myStr.replace(/[^a-zA-Z0-9\.-]+/g,"");

вы говорите, чтобы удалить все, что не является буквой, цифрой или . (поэтому удаление тире)

просто добавив тире/дефис в группу персонажа все