Я пытаюсь заменить символы пробела тире/дефисом в JavaScript. У меня большая часть кода работает так, что он добавляет тире после каждого пробела между символами (мне не нужны 2 тире/дефиса подряд), но как только я нажимаю другой символ, тире исчезает. Может мой код не правильно отформатирован?
Я пытаюсь создать что-то похожее на Linkedin, когда вы создаете страницу компании, она просит вас создать URL-адрес компании. Когда вы нажимаете пробел, он заменяется тире/дефисом.
function addHyphen(element) {
let ele = document.getElementById(element.id);
ele = ele.value.split('-').join(''); // Remove dash (-) if mistakenly entered.
let finalVal = ele.replace(/\s+/g, '-');
document.getElementById(element.id).value = finalVal;
document.getElementById("result").innerHTML = finalVal;
}
<!DOCTYPE html>
<html>
<head>
<title>Add Hyphen to a text using JavaScript</title>
</head>
<body>
<div>
<input type = "text" id = "tbNum" onkeyup = "addHyphen(this)" placeholder = "Type some values here" />
</div>
<div>
<label id = "result"></label>
</div>
</body>
</html>
Я знаю, что эта линия была проблемой. Как убедиться, что нет двух последовательных тире/дефисов?
Вы можете сделать что-то вроде этого:
const $result = document.getElementById("result");
function addHyphen($el) {
$el.value = hyphenize($el.value);
$result.innerHTML = $el.value;
}
function hyphenize(str) {
return str
.replace(/[^a-z0-9]/gi, '-') // Replace non-alphanumerical chars with '-'
.replace(/-+/g, '-'); // Deduplicate them
}
<div><input type = "text" id = "tbNum" onkeyup = "addHyphen(this)" placeholder = "Type some values here" /></div>
<div><label id = "result"></label></div>
В строке, где вы прокомментировали
// Remove dash
, вы... убираете все тире