logi sisse meist KKK

Alates 1.01.2018 pinu.ee lõpetab oma töö. Tänud kõigile osalejatele ja kohtume jälle!

Kuidas valideerida ja tekstist leida telefoni numbrit ning see ära normaliseerida?

Üldist lahendust ei ole leidnud. Nodejs-i phone teek Eesti numbritega väga hästi ringi ei käi.

Oleks hea teada/näha, mida kasutatakse (mistahes keeles). Veel parem kui oleks olemas mingi laiem lahendus, mis toimiks ka teiste riikide numbritega.

Teen ise algust ja postitan postgresql-i funktsiooni, mida olen kasutanud AINULT mobiili numbrite jaoks (SMS saatmine).

Näide tulemustest

select
   gsm('+372 5735735') as a,
   gsm('37255655325') as b,
   gsm('vanaema: 58-43-44232') as c,
   gsm('55 652 4323, 56234226') as d,
   gsm('43332145') as e;

     a       |      b      |      c       |      d       |  e
-------------+-------------+--------------+--------------+-----
 37255655325 | 37255655325 | 372584344232 | 372556524323 |

Funktsioon ise:

CREATE OR REPLACE FUNCTION gsm(varchar) RETURNS varchar AS $$
SELECT replace(replace(
    CASE WHEN (nr ~ '^\+?372') THEN replace(nr, '+', '')
         ELSE '372' || nr
    END
    ,'-', ''), ' ', '')
FROM regexp_split_to_table($1, '\s*[^0-9+() -]+\s*') AS nr
WHERE nr IS NOT NULL
  AND (   (nr ~ '^(\+?372)?\s*5[0-9 -]*$')  --  et
--      OR nr SIMILAR TO E'\s*(?:\\+?371)'  -- lv
--      OR nr SIMILAR TO E'\s*(?:\\+?358)'  -- fi
)
-- suht juhuslik vahemik on 5 kuni 18
AND length( regexp_replace(nr, '[^0-9]', '') ) BETWEEN 5 AND 18
LIMIT 1;
$$ LANGUAGE sql IMMUTABLE STRICT;

küsitud Jul 03 at 15:45

Kaiko%20Kaur's gravatar image

Kaiko Kaur
2307712

edited Jul 03 at 15:46


Ega siin väga paremat lahendust ei olegi. Matchide leidmiseks kasutaks ise \+?(([0-9]+|\([0-9]+\))([ \-][0-9]+|\([0-9]+\))*).

function extractPhoneNumbers(s) {
    var matches = s.match(/\+?(([0-9]+|\([0-9]+\))([ \-][0-9]+|\([0-9]+\))*)/g);
    for(var i = 0; i < matches.length; i++) {
        matches[i] = matches[i].replace(/[ \-]/g, " ");
    }
    return matches;
}

Edasised arvamised ja laiendused pigem sõltuvad kontekstist.

link

vastatud Jul 04 at 11:27

egon's gravatar image

egon ♦♦
771239

edited Jul 04 at 12:18

Sinu vastus
lülita eelvaade

Jälgi seda küsimust

By Email:

Pärast sisselogimist saad tellida muudatuse teavitusi siit

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *kaldkiri* või __kaldkiri__
  • **paks kiri** või __paks kiri__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • põhilised HTML märgendid on samuti toetatud

Pinu tööpakkumised

kõik pakkumised »

Küsimuse sildid:

×2

küsitud: Jul 03 at 15:45

nähtud: 569 korda

viimati uuendatud: Jul 04 at 12:18

Sarnased küsimused

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee