mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
39 lines
1.2 KiB
CoffeeScript
39 lines
1.2 KiB
CoffeeScript
|
XRegExp = require('xregexp')
|
||
|
|
||
|
# A note about SAFE_REGEX:
|
||
|
# We have to escape the escape characters because XRegExp compiles it first.
|
||
|
# So it's equivalent to `^[\p{L}\p{N}\s\-_!&\(\)]+$]
|
||
|
# \p{L} = any letter in any language
|
||
|
# \p{N} = any kind of numeric character
|
||
|
# https://www.regular-expressions.info/unicode.html#prop is a good resource for
|
||
|
# more obscure regex features. standard RegExp does not support these
|
||
|
|
||
|
SAFE_REGEX = XRegExp("^[\\p{L}\\p{N}\\s\\-_!&\\(\\)]+$")
|
||
|
EMAIL_REGEX = XRegExp("^[\\p{L}\\p{N}.+_-]+@[\\w.]+$")
|
||
|
|
||
|
SpamSafe =
|
||
|
isSafeUserName: (name) ->
|
||
|
SAFE_REGEX.test(name) && name.length <= 30
|
||
|
|
||
|
isSafeProjectName: (name) ->
|
||
|
if XRegExp("\\p{Han}").test(name)
|
||
|
SAFE_REGEX.test(name) && name.length <= 30
|
||
|
SAFE_REGEX.test(name) && name.length <= 100
|
||
|
|
||
|
isSafeEmail: (email) ->
|
||
|
EMAIL_REGEX.test(email) && email.length <= 40
|
||
|
|
||
|
safeUserName: (name, alternative, project = false) ->
|
||
|
return name if SpamSafe.isSafeUserName name
|
||
|
alternative
|
||
|
|
||
|
safeProjectName: (name, alternative) ->
|
||
|
return name if SpamSafe.isSafeProjectName name
|
||
|
alternative
|
||
|
|
||
|
safeEmail: (email, alternative) ->
|
||
|
return email if SpamSafe.isSafeEmail email
|
||
|
alternative
|
||
|
|
||
|
module.exports = SpamSafe
|