Regex cho phiên bản ngữ nghĩa (semver)

Dùng /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/ để kiểm tra toàn bộ chuỗi có phải là phiên bản semver hợp lệ hay không. Mọi ví dụ bên dưới đều đã được kiểm thử với mẫu này, và bạn có thể mở chúng trong Regex Tester với sẵn dữ liệu mẫu.

Cập nhật

/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/
Mở trong Regex Tester
Đầu vàoKết quảNhóm
1.0.0✓ Khớp1 0 0
2.10.3-beta.1✓ Khớp2 10 3 beta.1
1.0.0+build.5✓ Khớp1 0 0 build.5
0.1.0-rc.1+sha.5114f85✓ Khớp0 1 0 rc.1 sha.5114f85
1.0✗ Không khớp
01.0.0✗ Không khớp
v1.0.0✗ Không khớp
1.0.0-✗ Không khớp

Mẫu hoạt động như thế nào

PhầnÝ nghĩa
(0|[1-9]\d*)Major, minor và patch (nhóm 1–3): các số không có số 0 đứng đầu
\.Dấu chấm ngăn cách giữa chúng
(?:-([0-9A-Za-z.-]+))?Phần pre-release tùy chọn đứng sau dấu gạch ngang (nhóm 4): beta.1, rc.2
(?:\+([0-9A-Za-z.-]+))?Phần build metadata tùy chọn đứng sau dấu cộng (nhóm 5)

Ví dụ code

JavaScript

const re = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?', value))

PHP

preg_match('/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/', $value) === 1;

Ghi chú và giới hạn

Đây là phiên bản thực tế của quy tắc semver 2.0. Nếu thẻ (tag) của bạn có tiền tố v thì hãy bỏ v trước khi kiểm tra. Hãy so sánh các phiên bản theo số, từng nhóm một, thay vì so sánh dạng chuỗi.

Câu hỏi thường gặp

Regex cho phiên bản ngữ nghĩa (semver) là gì?
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$/ — mẫu này khớp toàn bộ chuỗi. Xem bảng ở trên để biết mỗi phần làm gì.
Những ví dụ nào khớp?
Trong các ví dụ đã kiểm thử, những ví dụ khớp là: 1.0.0, 2.10.3-beta.1, 1.0.0+build.5, 0.1.0-rc.1+sha.5114f85. Các ví dụ còn lại thì không khớp.
Làm sao để kiểm thử regex này?
Nhấn “Mở trong Regex Tester” — mẫu, cờ (flags) và văn bản mẫu sẽ tự động được nạp, và các kết quả khớp sẽ được tô sáng khi bạn chỉnh sửa.