看板 java 關於我們 聯絡資訊
※ 引述《laruku2000 (阿本)》之銘言: : 最近寫了個小程式卻出現了問題,我需要能判定JTextField欄位輸入的值是IP位置,也就是 : 只能輸入255以下的數字,其他一律禁止,我是將IP位置分成4個JTextField來輸入,但我目 : 前使用的方法只想到幾種,都有問題如下 : 第一個 : xxx.getText().matches("[0-2][0-9][0-9]{1,3}") : 但這樣255是合法的,299卻是非法IP,無法抓出 : 另一個 : xxx.getText() < 256 : 雖然一定可限制在255以內,但若輸入非數字一樣抓不到 : 另一個 : xxx.getText() < 256 && xxx.getText().matches("[^a-zA-Z]") : 語法好像有點錯,限制在255以內及非大小寫a-z,語法較長且有4個欄位要確認,輸入符號或 : 中間有空格一樣抓不到 : 目前還想不到好方法,理論上用matches()會是最好的選擇,一律禁止限定格式以外的,只能 : 輸入0-2或0-9的數字,但255以上的數值不知該怎麼判別,大家有想到其他好方法嗎? 我是覺得你『一定可以』一起用,但是你『不想』或『不會』一起用, 就和你不會限制 0~256 卻只能用 0~299的判別一樣。 人就是要變通嘛!!!不會的時候除了學,就是硬幹啊~囧 學程式應該就知道沒有永遠"聰明"的選擇... 好啦,其實上面只是說笑的, 不過下次至少去Google一下regexp的用法, 我敢打賭除非你又省略了甚麼事情沒講(這樣就要翻桌啦), 不然上面match的 rule你一定沒測過, 你上面的rule是從 00 0 到 29 999,和你的255扯不上關係... 就IPv4的IP來講範圍值應該是0-255,不然就是我才疏學淺不曉得這個規則... 我的蠢解法大概也只比你本來的錯誤rule好一點,不過可以確實work。XD ──────────────────────────────── /* regexp中 () 內可視為一單位 , | 則代表 or */ String reg="([01]{0,1}[0-9]{1,2})|(2[0-4][0-9])|(25[0-5])"; //0-199 200-249 250-255 /*要養成測試結果的好習慣*/ for(int i=0;i<299;i++){ String t=""+i; System.out.println(t+" "+t.matches(reg)); } ──────────────────────────────── but 如果是我的話,我會寧願選擇 try{ int k= Integer.parseInt(t); if(k<0 || k>255 ) throw new NumerberFormatException("out of bound"); }catch(NumberFormatException e){ /* Show Warning Message */ } 該歸數學解決的就讓它歸數學解決啊...... ──────────────────────────────── 如果只是考慮到不想要Exception的問題,更簡單的變通作法是: int k=-1; if(t.matches("[0-9]+")){ k=Integer.parseInt(t); if(k<0||k>255) k=-1; } if(k==-1){ /* Show Warning Message */ } ──────────────────────────────── 連愚笨如我都能想到這些問題的解法了 , 這應該不會是很大的問題啊...囧 -- 鎖螺絲有螺絲起子不用,要用電動起子就算了, 連說明書也不看,結果用電動起子鑽不動還說螺絲起子不能用....大囧 -- String temp="relax"; | Life just like programing while(buringlife) String.forgot(temp); | to be right or wrong while(sleeping) brain.setMemoryOut(); | need not to say stack.push(life.running); | the complier will stack.push(scouting.buck()); | answer your life stack.push(bowling.practice()); | Bone everything -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.27.68 ※ 編輯: TonyQ 來自: 220.134.27.68 (01/09 17:20) ※ 編輯: TonyQ 來自: 220.134.27.68 (01/09 17:22)