簡體   English   中英

Javascript,使用正則表達式規范化電話號碼字符串

[英]Javascript, normalize Phone Number Strings with regular Expression

我對正則表達式確實很陌生,但這是我要嘗試做的事情。

我有一個電話號碼輸入,需要將其轉換成這樣的字符串:

'2228883333'

用戶可以像以下任何一種方式鍵入它:

222 888 3333
(222) 888 3333
12228883333
1 222 888 3333
1 (222) 888 3333
2228883333
+1 222 888 3333

我想允許用戶鍵入它,但是他們最常用,然后在服務器端將電話號碼轉換為我想要的格式(NodeJS)

這是我從PHP嘗試過的正則表達式,但是我不知道如何用Javascript編寫。

var number = req.body.phone;
    number = number.replace('~.*(\d{3})[^\d]{0,7}(\d{3})[^\d]{0,7}(\d{4}).*~', '$1$2$3');

知道如何在NodeJS(Javascript)中完成此操作嗎?

如果您完全按照自己的描述進行操作,則系統將在有人首次嘗試從美國以外的地方輸入電話號碼時使系統失敗。

我建議在數字中保留+1(或僅1),並僅在數字尚未包含其他國家/地區代碼時才添加。

我在這里會做什么:

  1. 刪除除數字和加號外的所有內容(並可能將前導00轉換為+)
  2. 如果字符串以加號開頭,則不要添加任何內容
  3. 如果字符串以1開頭,則加一個加號
  4. 如果字符串以加號或1以外的其他字符開頭,請添加+1

例:

var number = req.body.phone;
number = number.replace(/[^\d+]+/g, '');
number = number.replace(/^00/, '+');
if (number.match(/^1/)) number = '+' + number;
if (!number.match(/^\+/)) number = '+1' + number;

現在,對於所有數字:

222 888 3333
(222) 888 3333
12228883333
1 222 888 3333
1 (222) 888 3333
2228883333
+1 222 888 3333

加上一些額外的:

001 222 888 3333
001 (222) 888 3333
001(222)888-3333

您應該有一個標准化的表示形式,但是這次是:

+12228883333

支持國際號碼。 如果需要,可以刪除加號:

number = number.replace(/^\+/, '');

但我建議您保留該號碼,以便清楚地看到此號碼包括處理該數據的任何人的國家/地區代碼,並且該號碼可以在世界范圍內直接撥打。

這很容易完成兩個正則表達式替換:

const unformatPhone = phone => phone.replace(/\D/g, '').replace(/^1/, '');

這可能比單個正則表達式要干凈得多。

第一個正則表達式/\\D/g匹配所有非數字字符。 第二個/^1/匹配前導“ 1”。 通過將它們替換為空字符串,將它們都刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM