-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsanitize.go
55 lines (42 loc) · 1.03 KB
/
sanitize.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main
import (
"github.com/gosimple/slug"
"regexp"
"strings"
)
const DNS_MAX_LENGTH = 63
func MakeUrlSlug(name string, length int) string {
sanitizedName := strings.ToLower(name)
// Remove non a-z chars in the beginning
charIndex := 0
for i := 0; i < len(sanitizedName); i++ {
if isAZ(rune(sanitizedName[i])) {
break
}
charIndex = i
}
sanitizedName = sanitizedName[charIndex:]
// Remove all non valid dns chars
sanitizedNameFiltered := ""
for i := 0; i < len(sanitizedName); i++ {
char := rune(sanitizedName[i])
if isDnsValid(char) {
sanitizedNameFiltered += string(char)
}
}
sanitizedName = sanitizedNameFiltered
slug.MaxLength = length
return slug.Make(sanitizedName)
}
func isDnsValid(char rune) bool {
return isAZ09(char) || char == '-'
}
func isAZ09(char rune) bool {
return isAZ(char) || is09(char)
}
func isAZ(char rune) bool {
return regexp.MustCompile(`^[A-Za-z]`).MatchString(string(char))
}
func is09(char rune) bool {
return regexp.MustCompile(`^[0-9]`).MatchString(string(char))
}