Регулярное выражение для замены пробела тире в 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, однако я хочу, чтобы он заменил пробелы тире" -".
Если я изменю тире на точку '."это работает, не знаете, почему и как это исправить? Регулярное выражение сбивает меня с толку.
может ли кто-нибудь указать мне справа направление?
обновление
просто получил его для работы по мере необходимости, используя это...
<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);
});
\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,"");
вы говорите, чтобы удалить все, что не является буквой, цифрой или .
(поэтому удаление тире)
просто добавив тире/дефис в группу персонажа все