2022年1月31日 星期一

用正規表達式檢查IP

 用正規表達式檢查IP

前言

  在先前的 在 JavaScript 初探正規表達式 裡基本的使用了正規表達式,這次練習用正規表達式來檢查IP,在此把學習的過程做個紀錄。


內容

  範例如下

const reg0_9 = /^(\d)$/;
const reg0_99 = /^(\d|[1-9]\d)$/;
const reg0_999 = /^(\d|[1-9]\d|[1-9]\d\d)$/;
const reg0_255 = /^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))$/;
let num = '256';

console.log( `reg0-9:${reg0_9.test(num)}` );//
console.log( `reg0-99:${reg0_99.test(num)}` );//
console.log( `reg0-999:${reg0_999.test(num)}` );//
console.log( `reg0-255:${reg0_255.test(num)}` );//

const regIP4 = /^((\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.){4}$/;
let ipStr = '0.255.255.255.';
console.log( `regIP4:${regIP4.test(ipStr)}` );//


要檢查IP的字串前要先學會如何檢查數字字串,範例先示範檢查 0 ~ 9 ,這裡要注意字首與字尾的寫法,如果只寫"\d",就無法檢查只有一個數字,而會變成裡面只要有數字,接著檢查 0 ~ 99 ,不幸的寫法不是"\d\d",因為像"01"這樣的寫法會過關,所以透過"|"的寫法配合,當位數只有1位數,就使用"\d",兩位數的時候就"[1-9]\d",這是檢查 10 ~ 99 ,接著示範 0 ~ 999 ,邏輯跟 0 ~ 99 的時候差不多,但要多加 100 ~ 999 的檢查,接著重點來了,如何檢查 0 ~ 255 呢? 要多檢查 100 ~ 199 ,透過"1\d\d",那 200 ~ 255 呢?這裡要把 200 ~ 249 與 250 ~255 隔開,所以寫法變成"2([0-4]\d|5[0-5])"。


  在學會了如何檢查 0 ~ 255 ,接著就可以檢查 IP , IP 字串可以想像成 (0_255).(0_255).(0_255).(0_255) ,範例透過與語法連續檢查 4 次,但要注意這個方法檢查時, IP 的字尾要多加".",這是為了讓正規表達式看起來簡潔。


參考資料

[ www.itread01.com ] 效率最快的 IPv4 和 IPv6 正則表示式


相關文章與資料

在 JavaScript 初探正規表達式

2022年1月24日 星期一

在 Windows 分割硬碟

 在 Windows 分割硬碟

前言

  最近添購新的硬碟後發現我從沒在 Windows 裡分割硬碟,我都是在安裝 Windows 時附帶的分割程式裡分割,所以就做個學習,在此做個紀錄。


內容

  分割的方法意外的滿簡單的,先將硬碟的硬體裝好後開機,開機後在"本機"裡會看不到新增的硬碟,原因是硬碟還未分割,在 Windows 的"本機" 的 Icon 按下右鍵並選擇管理,如下圖

開啟"電腦管理"

在開始裡搜尋"電腦管理"也可以得到一樣的結果,在"電腦管理"裡點選"磁碟管理",如下圖
選擇"磁碟管理"

選完後可以在圖中"2"處看到所有磁碟的狀況,接著找到剛安裝的硬碟,並在該處按下右鍵選取"新增簡單磁碟區",接著會有視窗選擇要分割多少容量,操作起來跟在 Windows 的安裝程式裡的那個差不多,割完後就可以直接使用,不需要重開機。


參考資料

[ ofeyhong.pixnet.net ] 【教學】在Windows系統中,如何硬碟分割? (1槽分成2槽)

2022年1月17日 星期一

在 JavaScript 的正規表達式取得比對結果的索引值

 在 JavaScript 的正規表達式取得比對結果的索引值

前言

  在之前的 在 JavaScript 初探正規表達式 簡單的使用正規表達式,但實際用後發現需要知道比對結果的索引值,做了個學習,在此做個紀錄。


內容

  範例如下

const reg = /ab*c/g;
let s = 'xxxabbc,xxxabc';
console.log( s.match(reg) );//["abbc", "abc"]
for( const match of s.matchAll(reg) ){
  console.log(match.index);
}


在上次的範例使用 string.match() 可以得到所以比對的結果,但有的時候會需要知道結果的索引值,所以要透過 string.matchAll() 來取得,這裡回傳的結果不再是 string ,而是一個類別,透果 index 來取得比對的結果的索引值。


參考資料

[ developer.mozilla.org ] String.prototype.matchAll()


相關文章與資料

在 JavaScript 初探正規表達式

2022年1月10日 星期一

在 Python 初探正規表達式

 在 Python 初探正規表達式

前言

  在先前的 在 JavaScript 初探正規表達式 裡使用正規表達式,想了一下 Python 也是預設就支援正規表達式,所以就順便做個學習,在此做個紀錄。


內容

  範例如下

import re
str = 'xxxabbc,xxxabc'
failedStr = 'failed string'
regEx = re.compile( 'ab*c' )
print( regEx.search( str ).span() )#(3, 7)
#check is match?
res = regEx.search( failedStr )
if res is not None:
    print('Match')
else:
    print('Not match')
#
print( regEx.findall( str ) )#['abbc', 'abc']


要在 Python 使用正規表達式需要透過 re 模組,透過 re.compile() 可以做出像 JavaScript 的 RegExp 一樣的類別,但這次不需要在字尾加'g',透過類別的 search() 可以取得比對的結果,但要注意回傳的是一個類別,利用回傳的類別的 span() 可以得到各個結果的起始位址,這裡有個不太直覺的地方, search() 在當沒有任何結果符合狀況時會回傳 None ,所以直接 search() 完喚起 span() 其實是有危險的!最後可以透過 findall() 來取得所有符合的結果,這裡回傳的就是陣列,就算沒有符合的結果也會回傳空陣列,可以安心使用。


參考資料

[ www.runoob.com ] Python 正则表达式


相關文章與資料

在 JavaScript 初探正規表達式

2022年1月3日 星期一

在 JavaScript 初探正規表達式

 在 JavaScript 初探正規表達式

前言

  雖然從很久以前就知道有正規表達式這樣的檢查字串手法,但因為我不常用到複雜的檢查字串規則,所以就一直能避就避的使用著它,最近剛好有空就用 JavaScript 來學習它,在此做個紀錄。


內容

  先看範例,如下

const reg = /ab*c/g;
let s = 'xxxabbc,xxxabc';
console.log( reg.test(s) );//true
console.log( s.match(reg) );//["abbc", "abc"]
console.log( s.replace(reg,'YYY') );//xxxYYY,xxxYYY


正規表達式用雙'/'來包住填入規則,但範例多了個'g'在字尾,這是'global search'的意思,待會會說明,範例的規則是a以後有0到多次的b,然後後有個c,這就是範例的規則,'ac'、'abc'、'abbc'...等都符合資格,接著可以透過 RegExp.test() 來檢查字串是否府合資格,RegExp 是 JavaScript 的正規表達式的類別,結果會回傳 true 或 false ,這個用法是最簡單的,接著第二個用法是透過 String.match()  來找到符合規則的字串,回傳的結果是個陣列,範例的結果有兩個,如果剛開始的規則裡沒有填寫字尾'g'的話,這裡的回傳結果就只會找一次,第三種用法是透過 String.replace() 來替代掉符合規則的文字,回傳的結果是一個字串,範例會將符合規則的字串都替換成'YYY'。


  這次初步的學習了正規表達式,正規表達式的填寫規則可以參考 [ developer.mozilla.org ] 正規表達式 裡面詳細的規則,除非很常使用正規表達式,不然應該很難把規則記下來,所以像我這種偶而用到的就用查的就可以了。


參考資料

[ developer.mozilla.org ] 正規表達式