Фармат тэлефоннага нумара з JQuery & рэгулярным выразам

Мне трэба, каб праверыць і пераўтварыць любы ўваходны Вал у фармат тэлефонных нумароў, г.зн.

input er+f375g25123435s67 i need to convert into +375 25 1234567

..

keyup: function(){
newval = $(this).val().replace(/(\D+|\+)/g, '');
newval = newval.replace(/\d(?=(?:\d{3})+(?!\d))/g, '$& ');
$(this).val(newval);
}

..

гэта яшчэ адзін код, мне трэба змяніць яго ..

3

3 адказы

Для таго, каб выразаць, не звязаныя з тэлефонам знакаў:

var phone = "er+f375g25123435s67";
phone = phone.replace(/[^+|\d]/g, ""); //result = "+3752512343567"

Затым, каб адпавядаць тэлефоннай схеме:

if (phone.match(/^[+][0-9]{12}$/))//or /^[+][0-9]{13}$/ for 13 digits
    ...

EDIT: Here's what I was able to come up with for the test & replace:

phone = $(this).val().replace(/^[^+]{1}/, '');
if (phone.length > 1)
    phone = phone.substring(0,1) + phone.substring(1).replace(/[^\d]/g, '');
if (phone.match(/^[+][\d]{12}$/))
    phone = phone.substring(0,4) + " " + phone.substring(4,6) + " " + phone.substring(6,14);

Located here: http://jsfiddle.net/cabbott/KaYeJ/

2
дададзена
Ваш прыклад радок мае вынік «+» і 13 лічбаў, у той час як ваша дапушчальная радок мае 12 лічбаў. Я не ўпэўнены, што правільнае колькасць лічбаў.
дададзена аўтар CAbbott, крыніца
Я заўважыў, што ў вашым jsfiddle. спрабуючы ўбачыць, калі я магу прыдумаць з малюнкам, каб працаваць з гэтым.
дададзена аўтар CAbbott, крыніца
Я абнавіў свой адказ і звязаны ў новым jsfiddle URL.
дададзена аўтар CAbbott, крыніца
першая частка кода працуе, але другі адзін не .. jsfiddle.net/jhzy9
дададзена аўтар drdarwin, крыніца
я дазволіць 12 лічбаў, адзін плюс і 2 месцы ..
дададзена аўтар drdarwin, крыніца
дарагі CAbbott, але мне не трэба, каб адпавядаць тэлефонны шаблон, мне трэба, каб пераўтварыць яго на ляту (унутры уваходу) .. - нешта накшталт гэтага jsfiddle.net/sXGLB (код амаль зроблена)
дададзена аўтар drdarwin, крыніца
калі ласка, націсніце на кнопку Відэльцы і даць мне новы URL
дададзена аўтар drdarwin, крыніца
$('input').live({   
    keyup: function() {           
        var ipt = $(this).val().replace(/[^\d]*/g, "");//remove non-digits

        ipt = ipt.replace(/(\d{1,3})(\d{1,2})?(\d{1,7})?.*/g, '+$1 $2 $3');

        $(this).val(ipt);       
    }
});

Скрыпкі, каб праверыць

2
дададзена
Я абнавіў свой адказ з рабочым адзін, у тым ліку рэгулярны выраз для фарматавання на хаду, праверце яго цяпер, калі ласка,
дададзена аўтар Yuri Ghensev, крыніца
да гэтага часу няма .. ( jsfiddle.net/sXGLB
дададзена аўтар drdarwin, крыніца
як кадзіраваць IPT = "+" + ipt.substring (0, 3) + "" + ipt.substring (4, 6) + "" + ipt.substring (7) у рэгулярны выраз?
дададзена аўтар drdarwin, крыніца

Вы можаце паспрабаваць гэта:

// гэта выдаляе нечисловой

<�Р> KeyUp: функцыя() {</р>      <�Р> вар тэлефон = $ (гэта) .val() замяніць (/ \ D/г, '') ;.
     вар myRegexp =/(\ d {3}) (\ d {3}) (\ д *)/г </р>      <�Р> вар супадзенне = myRegexp.exec (тэлефон);      $ (Гэта) .val ( '+' + адпавядае [1] + '' + матч [2] + '' + матч [3]); </р> <�Папярэдне> }

$ 1 $ 2 і $ 3 павінна быць 375 25 1234567

Comment : sorry didn't know you wanted a full answer with the code. http://jsfiddle.net/UcJeV/4/

2
дададзена
На жаль, гэты код не працуе ( jsfiddle.net/cYk4q ), як ёсць памылка тут (\ D + | +)
дададзена аўтар drdarwin, крыніца