RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 


 
主題: [其他] [分享]只能輸入數字跟小數點的文字方塊   字型大小:||| 
ROACH
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
減肥中!請勿餵食

十週年紀念徽章(四級)  

 . 積分: 15119
 . 精華: 14
 . 文章: 11767
 . 收花: 140853 支
 . 送花: 6005 支
 . 比例: 0.04
 . 在線: 8870 小時
 . 瀏覽: 85616 頁
 . 註冊: 8211
 . 失蹤: 5
 . 鄉下地方
#1 : 2009-8-29 09:45 AM     只看本作者 引言回覆

前幾天寫程式因為使用者常會在輸入數量的文字方塊
輸入一些不是數字的資料導致後續計算造成錯誤
後來本想直接用JavaScript判斷該文字方塊丟出錯誤訊息就好
後來又看到的這個作法
這個做法只能輸入0~9任何一個數字
但就是不能輸入小數點

後來經過研究後改成的下面方式
給大家參考一下
如果您的網頁需要那種
只能輸入數字跟小數點
不要使用者輸入數字以外的
可以用下列方式

<input type=text name=t1 size=5 onkeypress="return onKeyPressBlockNumbers(event);">


<Script>
function onKeyPressBlockNumbers(e) //限制只能key數字
{
var key = window.event ? e.keyCode : e.which;
var keychar = String.fromCharCode(key);
reg = /\d|\./;
return reg.test(keychar);
}
</Script>



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
dayi
開墾隊隊員
等級: 14等級: 14等級: 14等級: 14
ZeroX

十週年紀念徽章(五級)  

今日心情

 . 積分: 935
 . 文章: 2060
 . 收花: 7802 支
 . 送花: 2401 支
 . 比例: 0.31
 . 在線: 2821 小時
 . 瀏覽: 61582 頁
 . 註冊: 7129
 . 失蹤: 1228
 . ZeroX
#2 : 2009-8-29 10:26 AM     只看本作者 引言回覆

這個正規表示法還會有一點點小問題
使用者可以輸入一次以上的小數點
ex: 12.34.56.78
可以考慮再加個次數{0,1}的限制式上去



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
ROACH
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
減肥中!請勿餵食

十週年紀念徽章(四級)  

 . 積分: 15119
 . 精華: 14
 . 文章: 11767
 . 收花: 140853 支
 . 送花: 6005 支
 . 比例: 0.04
 . 在線: 8870 小時
 . 瀏覽: 85616 頁
 . 註冊: 8211
 . 失蹤: 5
 . 鄉下地方
#3 : 2009-8-29 10:44 AM     只看本作者 引言回覆

當初沒學過這種正規法
有點搞不懂
查的好多資料哦
dayi你要不要開課..ccc



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
dayi
開墾隊隊員
等級: 14等級: 14等級: 14等級: 14
ZeroX

十週年紀念徽章(五級)  

今日心情

 . 積分: 935
 . 文章: 2060
 . 收花: 7802 支
 . 送花: 2401 支
 . 比例: 0.31
 . 在線: 2821 小時
 . 瀏覽: 61582 頁
 . 註冊: 7129
 . 失蹤: 1228
 . ZeroX
#4 : 2009-8-29 11:32 PM     只看本作者 引言回覆

功力尚淺,談不上開課啦
我也沒有學過
都是翻網路上的資料
互相研究啦



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
leacks
銀驢友〔高級〕
等級: 14等級: 14等級: 14等級: 14


十週年紀念徽章(六級)  

今日心情

 . 積分: 854
 . 文章: 3455
 . 收花: 6791 支
 . 送花: 4256 支
 . 比例: 0.63
 . 在線: 4840 小時
 . 瀏覽: 30360 頁
 . 註冊: 7083
 . 失蹤: 1094
#5 : 2009-8-30 11:41 PM     只看本作者 引言回覆

沒標明是要哪種語言,我來亂入
vc++ .net

想的到的
.12345 x
012345 x
主要大概是補上這兩個,當然這方面要把視為無錯誤也是可行
另外0.1230 <--?在想要不要也加入

看來我的程式還是很差,寫這麼長(雖然有小小努力一下簡化&速度考慮)
不知道能不能更有效率一些

        private: System::Void TextCheck() {
                      array<Char>^ATemp;
                          int i,j=0;
                          ATemp=(textBox1->Text)->ToCharArray();
                          for(i=0;i<ATemp->GetLength(0);i++)
                             {
                                  if(ATemp[i]==0x2E)
                                    {
                                         j++;
                                         if(j>1)
                                           {
                                            MessageBox::Show(L"只能輸入一個小數點",L"輸入錯誤");
                                                return;
                                           }
                                    }
                                  else
                                    {
                                         if((ATemp[i]<0x30)||(ATemp[i]>0x39))
                                       {
                                            MessageBox::Show(L"只能輸入數字與小數點",L"輸入錯誤");
                                            return;
                                       }
                                    }
                             }
               i--;
                       if(j!=0)
                             {
                              if((ATemp[i]==0x2E)||(ATemp[0]==0x2E))
                                    {
                                 MessageBox::Show(L"第一位或最後一位數不得為小數點",L"輸入錯誤");
                                 return;
                                    }
                             }
                           else
                             {
                              if(ATemp[0]==0x30)
                                    {
                                 MessageBox::Show(L"第一位數不得為0",L"輸入錯誤");
                                 return;
                                        }
                             }
                          
                         }



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
charleshwu
鐵驢友〔初級〕
等級: 4


今日心情

 . 積分: 25
 . 文章: 43
 . 收花: 164 支
 . 送花: 16 支
 . 比例: 0.1
 . 在線: 283 小時
 . 瀏覽: 7603 頁
 . 註冊: 6976
 . 失蹤: 15
#6 : 2009-9-7 10:07 PM     只看本作者 引言回覆

直接跟以下的Regexp比較即可
^\d+(\.\d*)\?$

最好前面加上^以確保前面沒有附加別的字
同樣的後面加$以標示結尾比較好
若你前後允許空白可以前後將上\\s*如用下面的Regexp
^\s*\d+(\.\d*)?\s*$

有興趣可以參考 Oreilly 的 Mastering Regular Expressions 3rd ISBN: 0-596-52812-4



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
Litfal
銀驢友〔初級〕
等級: 12等級: 12等級: 12
寫奇怪的程式中

十週年紀念徽章(六級)  

 . 積分: 486
 . 文章: 322
 . 收花: 4068 支
 . 送花: 3976 支
 . 比例: 0.98
 . 在線: 965 小時
 . 瀏覽: 7522 頁
 . 註冊: 6475
 . 失蹤: 3456
#7 : 2009-11-11 03:34 AM     只看本作者 引言回覆

^(\\d+)(\\.\\d+)?$
我是這樣寫的...沒學過,總覺得我寫得比較奇怪...
當初配合wiki和MSDN研究了很久

^是字串開始,$是字串結束
d是0~9的數字
可以把表達式拆成整數與小數兩個部分
(\\d+)

(\\.\\d+)?

(\\d+)很簡單,就是整數部分為1個以上的0~9組成
(\\.\\d+)? 最後的問號代表(\\.\\d+)的小數點部分只能出現一次,或完全不具有小數點部分
\\.就是小數點,
d+就是小數點後為1個以上的0~9組成,這邊我比較龜毛,如果有輸入小數點則小數點後方一定要輸入數字,否則用d*即可。

[Litfal 在  2009-11-11 03:45 AM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-11-22 12:30 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.021481 second(s), 6 queries , Qzip disabled