
主題: [其他] [分享]只能輸入數字跟小數點的文字方塊 [打印本頁]
發表人:
ROACH 時間: 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>
發表人:
dayi 時間: 2009-8-29 10:26 AM
這個正規表示法還會有一點點小問題
使用者可以輸入一次以上的小數點
ex: 12.34.56.78
可以考慮再加個次數{0,1}的限制式上去
發表人:
ROACH 時間: 2009-8-29 10:44 AM
當初沒學過這種正規法
有點搞不懂
查的好多資料哦
dayi你要不要開課..ccc
發表人:
dayi 時間: 2009-8-29 11:32 PM
功力尚淺,談不上開課啦
我也沒有學過
都是翻網路上的資料
互相研究啦 
發表人:
leacks 時間: 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;
}
}
}
發表人:
charleshwu 時間: 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
發表人:
Litfal 時間: 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 作了最後編輯]
歡迎光臨 TWed2k (http://twed2k.org/) |
Powered by Discuz! 4.1.0 |