闭社主体 forked from https://github.com/tootsuite/mastodon
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
939 B

  1. // U+0590 to U+05FF - Hebrew
  2. // U+0600 to U+06FF - Arabic
  3. // U+0700 to U+074F - Syriac
  4. // U+0750 to U+077F - Arabic Supplement
  5. // U+0780 to U+07BF - Thaana
  6. // U+07C0 to U+07FF - N'Ko
  7. // U+0800 to U+083F - Samaritan
  8. // U+08A0 to U+08FF - Arabic Extended-A
  9. // U+FB1D to U+FB4F - Hebrew presentation forms
  10. // U+FB50 to U+FDFF - Arabic presentation forms A
  11. // U+FE70 to U+FEFF - Arabic presentation forms B
  12. const rtlChars = /[\u0590-\u083F]|[\u08A0-\u08FF]|[\uFB1D-\uFDFF]|[\uFE70-\uFEFF]/mg;
  13. export function isRtl(text) {
  14. if (text.length === 0) {
  15. return false;
  16. }
  17. text = text.replace(/(?:^|[^\/\w])@([a-z0-9_]+(@[a-z0-9\.\-]+)?)/ig, '');
  18. text = text.replace(/(?:^|[^\/\w])#([\S]+)/ig, '');
  19. text = text.replace(/\s+/g, '');
  20. text = text.replace(/(\w\S+\.\w{2,}\S*)/g, '');
  21. const matches = text.match(rtlChars);
  22. if (!matches) {
  23. return false;
  24. }
  25. return matches.length / text.length > 0.3;
  26. };