split.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. const split = (str: string, mode: 'rgba' | 'hsva') => {
  2. // 12,32,43 => [12,32,43]
  3. const reg = /^\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*,?\s*([\d.]*)\s*$/;
  4. const res = str.match(reg);
  5. const result: number[] = [];
  6. result[0] = Number(res?.[1]);
  7. result[1] = Number(res?.[2]);
  8. result[2] = Number(res?.[3]);
  9. result[3] = Number((res?.[4] === undefined || res?.[4] === '') ? 1 : res?.[4]);
  10. const check = (a: number, max: number) => {
  11. return !(isNaN(a) || a < 0 || a > max);
  12. };
  13. const ok = check(result[0], mode === 'rgba' ? 255 : 360)
  14. && check(result[1], mode === 'rgba' ? 255 : 100)
  15. && check(result[2], mode === 'rgba' ? 255 : 100)
  16. && check(result[3], 1);
  17. if (ok) {
  18. if (mode === 'rgba') {
  19. return {
  20. r: result[0],
  21. g: result[1],
  22. b: result[2],
  23. a: result[3]
  24. };
  25. } else {
  26. return {
  27. h: result[0],
  28. s: result[1],
  29. v: result[2],
  30. a: result[3]
  31. };
  32. }
  33. } else {
  34. return false;
  35. }
  36. };
  37. export default split;