Yêu cầu thg 12 27, 2019 4:28 SA 140 0 1
  • 140 0 1
+1

Cần giúp đỡ về RegExp

Chia sẻ
  • 140 0 1

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à:

  1. 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.
  2. Các đoạn con sẽ ngăn nhau bằng dấu hai chấm gt:1 mình gọi là keyvalue nhé.
  3. Đối với các đoạn có key là in, nin, btw, nbtw thì value sẽ có dạng foo-bar.
  4. Đoạn string này là không limit độ dài.

Thanks

1 CÂU TRẢ LỜI


Đã trả lời thg 1 11, 2020 4:33 SA
+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ị`)
        }
}
Chia sẻ
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í