Yêu cầu Jan 30th, 2019 6:08 a.m. 338 1 2
  • 338 1 2
+1

Regex number in Javascript

Chia sẻ
  • 338 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 CÂU TRẢ LỜI


Đã trả lời Jan 30th, 2019 6:19 a.m.
Đã được chấp nhận
+3
regex = /0\.\d+|[1-9]\d*(\.\d+)?/

Kết quả:

0.011 --> True

03.1231 --> False

23.283189 --> True

0242 --> False

Chia sẻ
Jan 30th, 2019 8:38 a.m.

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

Jan 30th, 2019 12:04 p.m.

@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à.

Jan 30th, 2019 12:16 p.m.

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.

Jan 31st, 2019 12:10 a.m.

@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.

Đã trả lời Jan 30th, 2019 8:14 a.m.
+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+)?)/
Chia sẻ
Jan 30th, 2019 8:32 a.m.

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

Jan 30th, 2019 8:38 a.m.

@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ỉ?

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí