SpamSafe.coffee 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. 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. SAFE_REGEX = XRegExp("^[\\p{L}\\p{N}\\s\\-_!'&\\(\\)]+$")
  10. EMAIL_REGEX = XRegExp("^[\\p{L}\\p{N}.+_-]+@[\\w.-]+$")
  11. SpamSafe =
  12. isSafeUserName: (name) ->
  13. SAFE_REGEX.test(name) && name.length <= 30
  14. isSafeProjectName: (name) ->
  15. if XRegExp("\\p{Han}").test(name)
  16. SAFE_REGEX.test(name) && name.length <= 30
  17. SAFE_REGEX.test(name) && name.length <= 100
  18. isSafeEmail: (email) ->
  19. EMAIL_REGEX.test(email) && email.length <= 40
  20. safeUserName: (name, alternative, project = false) ->
  21. return name if SpamSafe.isSafeUserName name
  22. alternative
  23. safeProjectName: (name, alternative) ->
  24. return name if SpamSafe.isSafeProjectName name
  25. alternative
  26. safeEmail: (email, alternative) ->
  27. return email if SpamSafe.isSafeEmail email
  28. alternative
  29. module.exports = SpamSafe