※ 引述《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 */
}
────────────────────────────────
連愚笨如我都能想到這些問題的解法了 ,
這應該不會是很大的問題啊...囧
--
鎖螺絲有螺絲起子不用,要用電動起子就算了,
連說明書也不看,結果用電動起子鑽不動還說螺絲起子不能用....大囧
--
[1;30m String temp="relax"; | Life just like programing[m
[1;30m while(buringlife) String.forgot(temp); | to be right or wrong[m
[1;30m while(sleeping) brain.setMemoryOut(); | need not to say[m
[1;30m stack.push(life.running); | the complier will[m
[1;30m stack.push(scouting.buck()); | answer your life[m
[1;30m stack.push(bowling.practice()); | [mBone[1;30m everything[m
--
※ 發信站: 批踢踢實業坊(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)