Вставка дефис в javascript
Каков самый простой способ вставки дефис в javascript?
У меня есть номер телефона eg.1234567890
пока отображается в переднем конце, я должен отображать его как 123-456-7890 с помощью javascript.
Каков самый простой и быстрый способ достичь этого?
Спасибо
Ответы
Ответ 1
Самый быстрый способ был бы с некоторым регулярным выражением:
Где n
это число
n.replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3");
Пример: http://jsfiddle.net/jasongennaro/yXD7g/
var n = "1234567899";
console.log(n.replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3"));
Ответ 2
Вы можете использовать substr-функцию для достижения этого, предположив, что дефисы всегда вставлены в одну и ту же позицию:
var hypString = phonestr.substr(0,3) + '-' + phonestr.substr(3, 6) + '-' + phonestr.substr(6);
Ответ 3
Учитывая этот тип ввода, другой способ:
var phone = "1234567890";
phone = phone.replace(/(\d{3})(\d{3})(\d+)/, '$1-$2-$3');
Конечно, это не работает, если ваш вход меняется.
Ответ 4
Вы можете создать функцию javascript для форматирования номера телефона. Что-то вроде этого:
function formatPhoneStr(o)
{
var strPhone = o.value;
if( (strPhone != null) && (strPhone.length > 0) && (strPhone.indexOf('(') == -1))
{
if (strPhone.length == 10)
{
strPhone = '(' + strPhone.substr(0,3) + ') ' + strPhone.substr(3,3) + '-' + strPhone.substr(6,4);
}
else if (strPhone.length > 10)
{
strPhone = '(' + strPhone.substr(0,3) + ') ' + strPhone.substr(3,3) + '-' + strPhone.substr(6,4) + ' x' + strPhone.substr(10);
}
o.value = strPhone;
}
}
Ответ 5
попробуйте это...
<input required type="tel" maxlength="12" onKeypress="addDashesPhone(this)" name="Phone" id="Phone">
function addDashesPhone(f) {
var r = /(\D+)/g,
npa = '',
nxx = '',
last4 = '';
f.value = f.value.replace(r, '');
npa = f.value.substr(0, 3);
nxx = f.value.substr(3, 3);
last4 = f.value.substr(6, 4);
f.value = npa + '-' + nxx + '-' + last4;
}
Ответ 6
Еще одна альтернатива, которая, по моему мнению, самая чистая: строковый метод slice
.
formattedPhone = phone.slice(0,3) + '-' + phone.slice(3, 6) + '-' phone.slice(6)
Первый параметр - это начальная позиция в строке, вторая - конечная позиция. Как вы можете видеть выше, никаких параметров он не доходит до конца строки. Хорошей особенностью является то, что, как и Python, отрицательные позиции подсчитываются от конца строки. Это может сделать ваш код несколько более надежным:
formattedPhone = phone.slice(0,3) + '-' + phone.slice(3, -4) + '-' + phone.slice(-4)
Даже если у вас есть телефон с 9 или 11 цифрами, он будет выглядеть хорошо.
Ответ 7
Если вы используете клиентскую библиотеку ASP.NET, у них есть отличный метод String.format, который предоставляет языковые форматы и всевозможные причудливые вещи. Этот метод называется так, как вы ожидали бы, если вы знакомы с .NET:
<script type="text/javascript">
var myPhone = String.format("{0}-{1}-{2}", firstThree, secondThree, lastFour);
</script>
Если вы не используете библиотеку ASP.NET, я уверен, что вы можете получить рудиментарное форматирование, выполненное в вашей собственной реализации, - очевидно, это было бы без локализации, и вы должны бросить некоторую обработку/проверку ошибок в миксе:
function format(str, arr){
for(var i = 0; i < arr.length; i++) {
var r = new RegExp("\\{" + i + "\\}", "g");
str = str.replace(r,arr[i]);
}
return str;
}
alert(format("{0}-{1}-{2}", [123,456,7890]));
Ответ 8
здесь мое решение на всякий случай, когда это помогает кому-то:
validatePhone: функция (e) {
var number = this.$el.find('#phoneNumberField').val().replace(/-/g, '');
if(number.length > 10) {
e.preventDefault();
}
if(number.length < 3) {
number = number; // just for legibility
} else if(number.length < 7) {
number = number.substring(0,3) +
'-' +
number.substring(3,6)
} else if(number.length > 6) {
number = number.substring(0,3) +
'-' +
number.substring(3,6) +
'-' +
number.substring(6,10);
}
this.$el.find('#phoneNumberField').val(number);
}