banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Regular Expression in VB 2005  XML
  [Programming]   Regular Expression in VB 2005 14/11/2008 07:46:35 (+0700) | #1 | 158811
[Avatar]
GIAOLONG
Member

[Minus]    0    [Plus]
Joined: 27/06/2006 22:21:15
Messages: 34
Offline
[Profile] [PM]
Không biết hỏi vầy có căn bản quá không nhưng mong mọi người giúp cho cách validates that the data nhập vào nó nhận số từ 0 to 100 including Decimal nhưng chỉ allowed hai integers and hai decimal thôi ví dụ 99.99, 55.55, etc.

Em search trên mạng thấy được cái code này: ^\d{0,2}(\.\d{1,2})?$ thằng này validates tất cả yêu cầu trên ngoài 100 and 0. Em thêm vào số 100 ở cuối ^\d{0,2}(\.\d{1,2})|100?$. Nhưng vẫn không nghĩ ra được làm sao cho nó nhận 0. Ai biết làm ơn chỉ cho. Thông cảm cho mới học thôi nên còn NOOB.
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 15/11/2008 03:24:17 (+0700) | #2 | 158899
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Thử thêm |0?|100?, hay |[0]{1}|10[0]{1]} xem sao
Hibernating
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 15/11/2008 04:24:22 (+0700) | #3 | 158904
[Avatar]
GIAOLONG
Member

[Minus]    0    [Plus]
Joined: 27/06/2006 22:21:15
Messages: 34
Offline
[Profile] [PM]
to Z0rr0:

Cảm ơn Mod nhiều em ngõ như sau ^\d{0,2}(\.\d{1,2}|0?|100?)?$.

Nó satisfied yêu cầu của em nhưng Mod có thể giải thích tại sao nó lại nhận 000 tối đa không? Ví dụ em viết một trương trình convert from mark to grade. Condition là 0 - 49.99 thì "Fail". Nhưng cái code trên cho phép tối đa 3 số 000 nếu đánh hơn 3 số không thì out of range.
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 15/11/2008 07:05:41 (+0700) | #4 | 158926
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Ý em là pattern trên ko kiểm tra được số dạng 49.99?
Để kiểm tra dạng này có thể dùng [0-9]{2}.[0-9]{2}
Hibernating
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 16/11/2008 05:00:48 (+0700) | #5 | 159050
[Avatar]
GIAOLONG
Member

[Minus]    0    [Plus]
Joined: 27/06/2006 22:21:15
Messages: 34
Offline
[Profile] [PM]
ý em không phải thế. Pattern trên kiểm tra được decimal và satified điều kiện của em đưa ra. Nhưng mà là như vầy, anh cũng biết là khi em đánh vào một con số không "0" thì nó sẽ là "Fail", right?, và hai con số không "00" kết quả vẫn thế nhưng khi đánh vào ba con số không "000" thì nó sẽ báo là out of range ( điều kiện này là do em định ra khi đang viết trương trình convert from mark to grade). Anh hiểu ý em nói chửa? Có nghĩa là em không hiểu tại sao nó lại như thế? Có cách gì giải thích không?
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 16/11/2008 12:58:03 (+0700) | #6 | 159083
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Bồ biết cái gì báo "out of range" không? Bản thân pattern dùng cho regex ko có "lỗi" smilie
Hibernating
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 17/11/2008 02:07:49 (+0700) | #7 | 159120
[Avatar]
GIAOLONG
Member

[Minus]    0    [Plus]
Joined: 27/06/2006 22:21:15
Messages: 34
Offline
[Profile] [PM]
Anh nói đúng đương nhiên sử dụng regex thì guarantee là không crash nó được rồi, nhưng ở đây em nói là program convert from mark to grade thì range em đặt ra chỉ từ 0 to 100 thôi. Mà chỉ cho phép hai integers and hai decimal. Có nghĩa khi em đánh một con số không hay hai hay bao nhiêu con số cũng được nó vẫn về giá trị 0, right? Em đang nghĩ không biết có phãi cái code trên chỉ cho phép hai integers hay sao ấy nên nó mới vậy. Anh nghĩ sao?
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 18/11/2008 00:20:26 (+0700) | #8 | 159177
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Đúng cái pattern cho regex trên cho max 2 số đối với dạng số thực.
Sao em ko đăng đoạn code và sample lên đây?
Hibernating
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 19/11/2008 03:12:24 (+0700) | #9 | 159355
[Avatar]
GIAOLONG
Member

[Minus]    0    [Plus]
Joined: 27/06/2006 22:21:15
Messages: 34
Offline
[Profile] [PM]
Trước đó em nghĩ nó dễ nên không cần đăng cái code lên anh vẫn hiểu. Sau đây là cái code:

With Me
markBoolean = Decimal.TryParse(.markTextBox.Text, markDecimal)
If Not Regex.IsMatch(.markTextBox.Text, "^\d{0,2}(\.\d{1,2}(0?)|100)?$") Then
MsgBox("Error: marks bust be numberic, between 0 to 100")
Else : Select Case markDecimal
Case Is <= FAIL_MARK : .gradeTextBox.Text = "Fail"
Case Is <= PASS_MARK : .gradeTextBox.Text = "Pass"
Case Is >= HIGH_DISTINCTION_MARK : .gradeTextBox.Text = "High Distinction"
End Select
End If
End With

Em vẫn chưa thử cái code [0-9]{2}.[0-9]{2} anh cho. Để khi khác, đang thi cử mệt phờ râu tai.
Anh có ý kiến gí không? Cái code em viết có quá dài đối với một trương đơn giản này không? hay có chỗ nào cần improve không?
[Up] [Print Copy]
  [Question]   Re: Regular Expression in VB 2005 19/11/2008 06:56:36 (+0700) | #10 | 159391
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]

GIAOLONG wrote:
Anh nói đúng đương nhiên sử dụng regex thì guarantee là không crash nó được rồi, nhưng ở đây em nói là program convert from mark to grade thì range em đặt ra chỉ từ 0 to 100 thôi. Mà chỉ cho phép hai integers and hai decimal. Có nghĩa khi em đánh một con số không hay hai hay bao nhiêu con số cũng được nó vẫn về giá trị 0, right? Em đang nghĩ không biết có phãi cái code trên chỉ cho phép hai integers hay sao ấy nên nó mới vậy. Anh nghĩ sao? 


Code trên cho phép 2 character, vì Regex sẽ match dạng text mà em.
Cho nên nhập "000" nó sẽ hiểu là 1 text chiều dài 3 kí tự, chứ không phải giá trị 0.

Anh ko rành VB.NET nên không nhận xét về code của em, cũng ko rõ lỗi "out of range" xảy ra chổ nào (TryParse?) smilie
Hibernating
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|