SpamSafe.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. const XRegExp = require('xregexp')
  2. // A note about SAFE_REGEX:
  3. // We have to escape the escape characters because XRegExp compiles it first.
  4. // So it's equivalent to `^[\p{L}\p{N}\s\-_!&\(\)]+$]
  5. // \p{L} = any letter in any language
  6. // \p{N} = any kind of numeric character
  7. // https://www.regular-expressions.info/unicode.html#prop is a good resource for
  8. // more obscure regex features. standard RegExp does not support these
  9. const HAN_REGEX = XRegExp('\\p{Han}')
  10. const SAFE_REGEX = XRegExp("^[\\p{L}\\p{N}\\s\\-_!'&\\(\\)]+$")
  11. const EMAIL_REGEX = XRegExp('^[\\p{L}\\p{N}.+_-]+@[\\w.-]+$')
  12. const SpamSafe = {
  13. isSafeUserName(name) {
  14. return SAFE_REGEX.test(name) && name.length <= 30
  15. },
  16. isSafeProjectName(name) {
  17. if (HAN_REGEX.test(name)) {
  18. return SAFE_REGEX.test(name) && name.length <= 10
  19. }
  20. return SAFE_REGEX.test(name) && name.length <= 100
  21. },
  22. isSafeEmail(email) {
  23. return EMAIL_REGEX.test(email) && email.length <= 40
  24. },
  25. safeUserName(name, alternative, project) {
  26. if (project == null) {
  27. project = false
  28. }
  29. if (SpamSafe.isSafeUserName(name)) {
  30. return name
  31. }
  32. return alternative
  33. },
  34. safeProjectName(name, alternative) {
  35. if (SpamSafe.isSafeProjectName(name)) {
  36. return name
  37. }
  38. return alternative
  39. },
  40. safeEmail(email, alternative) {
  41. if (SpamSafe.isSafeEmail(email)) {
  42. return email
  43. }
  44. return alternative
  45. },
  46. }
  47. module.exports = SpamSafe