+1
Cần giúp đỡ về RegExp
Hiện tại mình đang cần viết 1 regex để validate string nhưng đang bị vướng, mong mọi người giúp đỡ.
Mình có 1 string dạng gt:1,in:1-2,nin:1-2,btw:1-2,nbtw:1-2
và yêu cầu của regex là:
- Các đoạn trong string được chia nhau bởi dấu phẩy (để có thể split). Đoạn này mình đã xử lý được bằng cách này
/(\S+?)(?:,|$)/g
. - Các đoạn con sẽ ngăn nhau bằng dấu hai chấm
gt:1
mình gọi làkey
vàvalue
nhé. - Đối với các đoạn có key là
in, nin, btw, nbtw
thì value sẽ có dạngfoo-bar
. - Đoạn string này là không limit độ dài.
Thanks
Thêm một bình luận
1 CÂU TRẢ LỜI
+1
Mình đọc đề bài chưa hiểu rõ lắm. Tạm tóm gọn lại như thế này, nếu sai ý bạn thì thông cảm nhé.
- Bạn có 1 string
- Bạn cần tách string đó thành các cặp key-value pair theo dấu ","
- Trong các cặp key-value pair đã tách, kiểm tra xem các key in, nin, btw, nbtw có value hợp lệ cú pháp (foo-bar) hay không
Mình viết bằng JS, tại lâu rồi không động đến PHP nên chẳng còn nhớ gì cả
let string = 'gt:1,in:1-2,nin:1-2,btw:1-2,nbtw:1-2';
let regEx = RegExp('(.)-(.)');
// tạo mảng mới gồm các cặp key-value
let keyPair = string.split(',').map(e => e.split(':'));
//kiểm tra cú pháp value theo key
for (i in keyPair) {
if (keyPair[i][0] == 'in' || keyPair[i][0] == 'nin' || keyPair[i][0] == 'btw' || keyPair[i][0] == 'nbtw')
if (!regEx.test(keyPair[i][1])) {
console.log(`Đã có lỗi ở key ${keyPair[i][0]}. Sai cú pháp giá trị`)
}
}