Skip to content

Instantly share code, notes, and snippets.

@wathika-eng
Created October 31, 2024 09:22
Show Gist options
  • Select an option

  • Save wathika-eng/0c6e7f4dc690017d0bc9adb0b4f3ab0d to your computer and use it in GitHub Desktop.

Select an option

Save wathika-eng/0c6e7f4dc690017d0bc9adb0b4f3ab0d to your computer and use it in GitHub Desktop.
package main
import (
"bufio"
"encoding/json"
"errors"
"fmt"
"log"
"os"
"regexp"
"strings"
)
const FileName string = "user.json"
type User struct {
Name string `json:"name"`
Email string `json:"email"`
Number string `json:"number"`
}
func main() {
userName, userEmail, userNumber, err := userDetails()
if err != nil {
log.Fatal(err)
}
newUser := User{
Name: userName,
Email: userEmail,
Number: userNumber,
}
checkInput, err := newUser.validateInput(userEmail, userName, userNumber)
if err != nil {
log.Fatal(err)
}
if err := newUser.save(checkInput); err != nil {
log.Fatal(err)
}
}
func userDetails() (string, string, string, error) {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Name: ")
userName, err := reader.ReadString('\n')
if err != nil {
return "", "", "", err
}
userName = strings.TrimSpace(userName)
fmt.Print("Email: ")
userEmail, err := reader.ReadString('\n')
if err != nil {
return "", "", "", err
}
userEmail = strings.TrimSpace(userEmail)
fmt.Print("Number: ")
userNumber, err := reader.ReadString('\n')
if err != nil {
return "", "", "", err
}
userNumber = strings.TrimSpace(userNumber)
return userName, userEmail, userNumber, nil
}
func (u *User) validateInput(email, name, number string) (bool, error) {
checkName, err := regexp.MatchString("^[A-Za-z]+$", name)
if err != nil {
return false, err
}
checkEmail, err := regexp.MatchString(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`, email)
if err != nil {
return false, err
}
checkNumber, err := regexp.MatchString(`^07\d{8}$`, number)
if err != nil {
return false, err
}
if checkName && checkEmail && checkNumber {
return true, nil
}
return false, errors.New("validation failed: check name, email, and number formats")
}
func (u *User) save(valid bool) error {
if valid {
file, err := json.MarshalIndent(u, "", " ")
if err != nil {
return err
}
err = os.WriteFile(FileName, file, 0644)
if err != nil {
return err
}
}
return nil
}
// func readJson(string) string {
// }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment