Asked Jan 30th, 6:08 AM 110 1 2
  • 110 1 2
+1

Regex number in Javascript

Share
  • 110 1 2

Chào mọi người. Mình đang làm Validate cho số Nhập vào. Số nhập vào có thể là số hữu tỉ nhưng không được là số 0: Ví Dụ:

0.5 --> True
08 --> False

Mình đã dùng thử cái này nhưng vẫn chưa có kết quả như mong đợi. Ai có biểu thức nào đúng chỉ mình với. /^([+-]?[1-9]+\.?\d*|0)(\.\d+)?$/

Cảm ơn mọi người

2 ANSWERS


Answered Jan 30th, 6:19 AM
Accepted
+3
regex = /0\.\d+|[1-9]\d*(\.\d+)?/

Kết quả:

0.011 --> True

03.1231 --> False

23.283189 --> True

0242 --> False

Share
Jan 30th, 8:38 AM

bạn ơi Regex bạn đưa nhập số 0 đầu tiên đã báo False rồi bạn

0
| Reply
Share
Jan 30th, 12:04 PM

@ductuandt3 À mình định nghĩa 1 số mà bạn cần là 1 số thực dương, mà số thực dương thì không bao giờ có số 0 ở đầu trừ trường hợp số đó lớn 0 nhỏ hơn 1. Tức là những trường hợp đúng sẽ là 0.012, 0.23232, 1.2123, 231.23 và trường hợp sai sẽ là 032.12312, 023.

Nếu bạn muốn có cả trường hợp nhiều số 0 vẫn đúng nữa thì thêm 0+ là được mà.

0
| Reply
Share
Jan 30th, 12:16 PM

Thực ra nếu bạn chịu khó dành khoảng 2h ra để tìm hiểu về regex thì bạn sẽ thấy nó cực kì đơn giản nếu bạn đã có mô tả chính xác về chuỗi mẫu. Thấy khó xong copy trên mạng về thử rất dễ sai và không đúng những gì mình muốn.

Mình sẽ giải thích về regex mình viết.

Có 2 trường hợp tách nhau bởi dấu OR được biểu diễn qua dấu |

  • \d biểu thị 1 số tự nhiên từ 0-9
  • [1-9] biểu thị 1 số tự nhiên từ 1-9
  • dấu ? biểu thị ý nghĩa cụm đằng trước nó có thể xuất hiện 0 hoặc 1 lần
  • + là kí tự đằng trước nó xuất hiện từ 1 lần trở lên
  • * là kí tự đằng trước nó có thể 0 hoặc nhiều lần
  • dấu . biểu thị dấu chấm, phân cách giữa phần nguyên và phần thực

Diễn giải bằng lời biểu thức của mình:

Số 0 ở đâu sau đó đến dấu chấm sau đó là đến các số từ 0-9 xuất hiện từ 1 đến nhiều lần OR một số bắt đầu bằng 1 số tự nhiên từ 1-9, sau đó có thể có các số từ 0-9 khác hoặc không, kết thúc bằng phần thực sau dấu chấm hoặc không có phần này cũng được

Còn tùy vào yêu cầu của bạn mà bạn có thể sửa lại. Chứ mình viết không False =)), chúng ta không hiểu ý nhau thôi.

+1
| Reply
Share
Jan 31st, 12:10 AM

@QuangPH cảm ơn bạn nhiều. Mình cũng đã tìm hiểu và viết được biểu thức đúng rồi.

0
| Reply
Share
Answered Jan 30th, 8:14 AM
+1

Bạn thử Regex này xem?

  1. Kiểm tra chuỗi là số:
/^\d+(?:.\d+)?$/

VD: 0.388

  1. Kiểm tra trong một chuỗi có chứa số không:
/(\d+(?:.\d+)?)/

VD: "Hôm nay tôi trúng thưởng xổ số 50.000.000" => Số lấy ra theo regex: 50.000.000

  1. Nếu số nhập có thể là số âm thì thêm (?:\+|\-):
1. /^(\+|\-)?\d+(?:.\d+)?$/
2. /((?:\+|\-)?\d+(?:.\d+)?)/
Share
Jan 30th, 8:32 AM

bạn ơi mình muốn cho phép nhập số 0.6 hoặc 0.5 hoặc 0.07 các kiểu ấy . Còn nếu nhập vào là 00 thì sẽ báo false. Khi nãy mình có dùng Regex của bạn nhưng vẫn không được ạ. Nhập dấu . sẽ báo False

0
| Reply
Share
Jan 30th, 8:38 AM

@ductuandt3 Làm thêm cái if check trường hợp chỉ toàn là số 0 thì false luôn cũng được bạn nhỉ?

0
| Reply
Share