diff --git a/app/(application)/edit-profile.tsx b/app/(application)/edit-profile.tsx index 9192726..b746b57 100644 --- a/app/(application)/edit-profile.tsx +++ b/app/(application)/edit-profile.tsx @@ -8,6 +8,7 @@ import { ConstEnv } from "@/constants/ConstEnv"; import Styles from "@/constants/Styles"; import { apiEditProfile, apiGetProfile } from "@/lib/api"; import { setEntities } from "@/lib/entitiesSlice"; +import { validateName } from "@/lib/fun_validateName"; import { useAuthSession } from "@/providers/AuthProvider"; import { MaterialCommunityIcons } from "@expo/vector-icons"; import { useHeaderHeight } from "@react-navigation/elements"; @@ -109,7 +110,7 @@ export default function EditProfile() { } } else if (cat == "name") { setData({ ...data, name: val }); - if (val == "") { + if (!validateName(val)) { setError({ ...error, name: true }); } else { setError({ ...error, name: false }); @@ -305,7 +306,7 @@ export default function EditProfile() { required value={data?.name} error={error.name} - errorText="Nama tidak boleh kosong" + errorText="Nama harus 3–50 karakter (huruf, angka, spasi, dan simbol ringan (. , ' _ -))" onChange={val => { validationForm("name", val) }} diff --git a/app/(application)/member/create.tsx b/app/(application)/member/create.tsx index 79baf0a..e7325e2 100644 --- a/app/(application)/member/create.tsx +++ b/app/(application)/member/create.tsx @@ -7,6 +7,7 @@ import Text from "@/components/Text"; import { ColorsStatus } from "@/constants/ColorsStatus"; import Styles from "@/constants/Styles"; import { apiCreateUser } from "@/lib/api"; +import { validateName } from "@/lib/fun_validateName"; import { setUpdateMember } from "@/lib/memberSlice"; import { useAuthSession } from "@/providers/AuthProvider"; import { MaterialCommunityIcons } from "@expo/vector-icons"; @@ -100,7 +101,7 @@ export default function CreateMember() { } } else if (cat == "name") { setDataForm({ ...dataForm, name: val }); - if (val == "") { + if (!validateName(val)) { setError({ ...error, name: true }); } else { setError({ ...error, name: false }); @@ -309,7 +310,7 @@ export default function CreateMember() { placeholder="Nama" required error={error.name} - errorText="Nama tidak boleh kosong" + errorText="Nama harus 3–50 karakter (huruf, angka, spasi, dan simbol ringan (. , ' _ -))" onChange={val => { validationForm("name", val) }} diff --git a/app/(application)/member/edit/[id].tsx b/app/(application)/member/edit/[id].tsx index f4ba6fb..3f6021d 100644 --- a/app/(application)/member/edit/[id].tsx +++ b/app/(application)/member/edit/[id].tsx @@ -7,6 +7,7 @@ import Text from "@/components/Text"; import { ConstEnv } from "@/constants/ConstEnv"; import Styles from "@/constants/Styles"; import { apiEditUser, apiGetProfile } from "@/lib/api"; +import { validateName } from "@/lib/fun_validateName"; import { setUpdateMember } from "@/lib/memberSlice"; import { useAuthSession } from "@/providers/AuthProvider"; import { MaterialCommunityIcons } from "@expo/vector-icons"; @@ -132,7 +133,7 @@ export default function EditMember() { } } else if (cat == "name") { setData({ ...data, name: val }); - if (val == "") { + if (!validateName(val)) { setError({ ...error, name: true }); } else { setError({ ...error, name: false }); @@ -348,7 +349,7 @@ export default function EditMember() { required value={data?.name} error={error.name} - errorText="Nama tidak boleh kosong" + errorText="Nama harus 3–50 karakter (huruf, angka, spasi, dan simbol ringan (. , ' _ -))" onChange={val => { validationForm("name", val) }} diff --git a/lib/fun_validateName.ts b/lib/fun_validateName.ts new file mode 100644 index 0000000..bddcf54 --- /dev/null +++ b/lib/fun_validateName.ts @@ -0,0 +1,18 @@ +/** + * Validasi Display Name + * Aturan: + * - 2 sampai 50 karakter + * - Huruf, angka, spasi, titik, koma, apostrof, underscore, dan dash + * - Tidak boleh semua spasi + */ +export const validateName = (name: string): boolean => { + const trimmed = name.trim(); + + // Jika kosong setelah di-trim → invalid + if (!trimmed) return false; + + // Regex: hanya huruf, angka, spasi, titik, koma, apostrof, underscore, dash + const regex = /^[a-zA-Z0-9\s._,'-]{3,50}$/; + + return regex.test(trimmed); +}; \ No newline at end of file