手機號碼的正規表達式
前言
最近寫了手機號碼的正規表達式,在此做個紀錄。
內容
在網上搜尋會達到以下
^09[\d]{8}$
不過這個病不支援以+886開頭的格式,所以我改成以下
^(09|\+886)[\d]{8}$
這是我第一次用"|",要記得把內容用"()"區隔和後面的連續 8 個數字,並記得 +886 的"+"要在前面補一個"\",不然會跟正規表達式的"+"混淆。
最近寫了手機號碼的正規表達式,在此做個紀錄。
在網上搜尋會達到以下
^09[\d]{8}$
不過這個病不支援以+886開頭的格式,所以我改成以下
^(09|\+886)[\d]{8}$
這是我第一次用"|",要記得把內容用"()"區隔和後面的連續 8 個數字,並記得 +886 的"+"要在前面補一個"\",不然會跟正規表達式的"+"混淆。
最今寫了 E-mail 的正規表達式,但上網查了一下答案遽然和我想得不太一樣,仔此把學習的過程做個紀錄。
首先我認為 E-mail 的正規表達式如下
^([a-z0-9_\.-]+)@([\da-z\.-]+)$
可以使用之前的工具 線上使用正規表達式 來驗證,如下圖
我認為 E-mail 的正規表達式 |
但上網對了一下答案發現遽然不一樣,答案如下
^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
前半段是一樣的,不一樣的部分在最後的部分,也就是最後的網域一定是由 2~6 的字所組成,只能說還好我有對答案,不然就只能等原本的寫法發生問題才能發現了。
[ www.fooish.com ] Regex Examples
最近在 Python 發生 round() 無法正常四捨五入的問題,在網上查詢後發現 Python 的 float 會有精度的問題,在此把學習的過程做個紀錄。
範例如下
from decimal import Decimal,ROUND_HALF_UP print(round(1.115, 2) )#1.11 print(Decimal('1.115').quantize(Decimal('.00'), ROUND_HALF_UP) )#1.12
1.115 在作 round() 會期望得到 1.12 ,但事實上卻是 1.11 ,要解決這個問題要透過 decimal 模組提供的 Decimal 來處理精度的問題,要四捨五入時透過 quantize() 來完成,這樣就可以得到期望的 1.12 。
最近發現 JavaScript 2022 有對正規表達式新增寫法,抽空做個學習,在此做個紀錄。
JavaScript 2022 有新增一個"d"的旗標給正規表達式,可以方便取得結果的文字的開頭與結尾,在先前的 在 JavaScript 的正規表達式取得比對結果的索引值 用的方法僅能找到開頭,範例如下
const regexp = /test\d/g; //without the /d flag const regexp2022 = /test\d/dg; //with the /d flag const str="test1test2"; const array = [...str.matchAll(regexp)]; const array2022 = [...str.matchAll(regexp2022)]; console.log(array[0].indices);//undefined console.log(array2022[0].indices);//[[0, 5]]
使用的方法就是在正規表達式上加一個"d"的旗標,這樣回傳結果時會多一個"indices"的變數,跟之前在 在 JavaScript 的正規表達式取得比對結果的索引值 用"index"做發法不同,"index"僅有開頭並不包結尾,"indices"則會包含開頭與結尾。
[ prog.world ] Work Proposals Included in the Coming ECMAScript 2022 Standard for JavaScript