test

ฝึกสมัครอีเมล J-Mail

    <div class="text-center mb-6">
        <h1 class="text-3xl font-bold text-blue-600">J-Mail</h1>
        <p class="text-gray-500 mt-1">แบบฟอร์มสำหรับฝึกสมัครอีเมล</p>
    </div>

    <div id="message-box" class="hidden p-4 rounded-lg mb-4 text-sm text-center"></div>

    <form id="signup-form" class="space-y-4" novalidate>
        <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
            <div>
                <label for="firstName" class="block text-sm font-medium text-gray-700">ชื่อจริง</label>
                <input type="text" id="firstName" name="firstName" required class="mt-1 block w-full px-3 py-2 bg-white border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-blue-500 focus:border-blue-500">
            </div>
            <div>
                <label for="lastName" class="block text-sm font-medium text-gray-700">นามสกุล</label>
                <input type="text" id="lastName" name="lastName" required class="mt-1 block w-full px-3 py-2 bg-white border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-blue-500 focus:border-blue-500">
            </div>
        </div>

        <div>
            <label for="username" class="block text-sm font-medium text-gray-700">ชื่ออีเมลที่ต้องการ (ภาษาอังกฤษ)</label>
            <div class="mt-1 flex rounded-md shadow-sm">
                <input type="text" id="username" name="username" required class="flex-1 min-w-0 block w-full px-3 py-2 rounded-none rounded-l-md focus:ring-blue-500 focus:border-blue-500 border-gray-300" placeholder="เช่น somchai.k">
                <span class="inline-flex items-center px-3 rounded-r-md border border-l-0 border-gray-300 bg-gray-50 text-gray-500 text-sm">
                    @jmail.com
                </span>
            </div>
             <p class="mt-1 text-xs text-gray-500">ใช้ได้เฉพาะภาษาอังกฤษ (a-z), ตัวเลข (0-9) และจุด (.)</p>
        </div>

        <div>
            <label for="password" class="block text-sm font-medium text-gray-700">สร้างรหัสผ่าน</label>
            <input type="password" id="password" name="password" required class="mt-1 block w-full px-3 py-2 bg-white border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-blue-500 focus:border-blue-500">
             <p class="mt-1 text-xs text-gray-500">ต้องมีความยาวอย่างน้อย 8 ตัวอักษร</p>
        </div>

        <div>
            <label for="confirmPassword" class="block text-sm font-medium text-gray-700">ยืนยันรหัสผ่าน</label>
            <input type="password" id="confirmPassword" name="confirmPassword" required class="mt-1 block w-full px-3 py-2 bg-white border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-blue-500 focus:border-blue-500">
        </div>

        <div>
            <button type="submit" class="w-full flex justify-center py-3 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors">
                สมัครใช้งาน
            </button>
        </div>
    </form>
</div>

<script>
    // --- ส่วนของโค้ดโปรแกรม (JavaScript) ---

    // ฐานข้อมูลจำลอง: ชื่ออีเมลที่มีคนใช้แล้ว
    const takenUsernames = ['admin', 'test', 'user', 'somchai', 'somsri'];

    const form = document.getElementById('signup-form');
    const messageBox = document.getElementById('message-box');

    // เมื่อฟอร์มถูกกด "สมัครใช้งาน"
    form.addEventListener('submit', function(event) {
        // หยุดการทำงานปกติของฟอร์ม
        event.preventDefault(); 

        // ดึงข้อมูลจากช่องกรอกต่างๆ
        const firstName = document.getElementById('firstName').value.trim();
        const lastName = document.getElementById('lastName').value.trim();
        const username = document.getElementById('username').value.toLowerCase().trim();
        const password = document.getElementById('password').value;
        const confirmPassword = document.getElementById('confirmPassword').value;

        // --- เริ่มการตรวจสอบข้อมูล ---

        // 1. ตรวจสอบว่ากรอกข้อมูลครบทุกช่องหรือไม่
        if (!firstName || !lastName || !username || !password || !confirmPassword) {
            showMessage('ไม่สำเร็จ: กรุณากรอกข้อมูลให้ครบทุกช่องเลยนะ', 'error');
            return;
        }

        // 2. ตรวจสอบว่ารหัสผ่านตรงกันหรือไม่
        if (password !== confirmPassword) {
            showMessage('ไม่สำเร็จ: รหัสผ่านทั้งสองช่องไม่ตรงกัน ลองตรวจสอบดูอีกครั้งนะ', 'error');
            return;
        }

        // 3. ตรวจสอบว่ารหัสผ่านสั้นเกินไปหรือไม่
        if (password.length < 8) {
            showMessage('ไม่สำเร็จ: รหัสผ่านสั้นเกินไปจ้ะ ต้องมีอย่างน้อย 8 ตัวอักษรนะ', 'error');
            return;
        }

        // 4. ตรวจสอบรูปแบบของชื่ออีเมล
        const usernameRegex = /^[a-z0-9.]+$/;
        if (!usernameRegex.test(username)) {
            showMessage('ไม่สำเร็จ: ชื่ออีเมลต้องเป็นภาษาอังกฤษ ตัวเลข หรือมีจุด (.) เท่านั้นนะ', 'error');
            return;
        }

        // 5. ตรวจสอบว่าชื่ออีเมลนี้มีคนใช้แล้วหรือยัง
        if (takenUsernames.includes(username)) {
            showMessage(`ไม่สำเร็จ: ชื่ออีเมล ${username}@jmail.com มีคนอื่นใช้ไปแล้ว ลองใช้ชื่ออื่นดูนะ`, 'error');
            return;
        }

        // --- เมื่อผ่านการตรวจสอบทั้งหมด ---
        const fullName = `${firstName} ${lastName}`;
        const finalEmail = `${username}@jmail.com`;
        showMessage(`ยินดีด้วย ${fullName}! การสมัครอีเมล ${finalEmail} สำเร็จแล้ว!`, 'success');

        // เพิ่มชื่อที่สมัครสำเร็จลงในฐานข้อมูลจำลอง (เพื่อให้ครั้งต่อไปใช้ซ้ำไม่ได้)
        takenUsernames.push(username);

        // ล้างข้อมูลในฟอร์ม
        form.reset();
    });

    /**
     * ฟังก์ชันสำหรับแสดงข้อความผลลัพธ์
     * @param {string} text - ข้อความที่ต้องการแสดง
     * @param {string} type - ประเภท 'success' (สำเร็จ) หรือ 'error' (ไม่สำเร็จ)
     */
    function showMessage(text, type) {
        messageBox.textContent = text;
        messageBox.classList.remove('hidden');

        if (type === 'success') {
            messageBox.classList.remove('bg-red-100', 'text-red-700');
            messageBox.classList.add('bg-green-100', 'text-green-700');
        } else { // error
            messageBox.classList.remove('bg-green-100', 'text-green-700');
            messageBox.classList.add('bg-red-100', 'text-red-700');
        }
    }
</script>