ตัวอย่างโค้ดต่อไปนี้ เป็นแนวทางการใช้งาน javascript สำหรับ
ตรวจสอบนับจำนวนข้อความที่ต้องการ สำหรับจัดส่ง SMS โดยสามารถนำ
ไปประยุกต์เพิ่มเติมตามต้องการ
การคำนวณจำนวนตัวอักษรในข้อความ SMS ในภาษาไทยและภาษาอังกฤษ
จะแตกต่างกันตามกฎเฉพาะของแต่ละภาษา ดังนี้:
1. ภาษาอังกฤษ (English):
- ใน SMS ส่วนมาก, 1 ข้อความ SMS มีขนาดไม่เกิน 160 ตัวอักษร (รวมเว้นวรรค)
- หากข้อความยาวเกิน 160 ตัวอักษร, จะถือเป็น 2 ข้อความหรือมากกว่า ตามจำนวนตัวอักษรที่มี
2. ภาษาไทย (Thai):
- เนื่องจากภาษาไทยมีอักขระจำนวนมากกว่าภาษาอังกฤษ, ดังนั้น การคำนวณ SMS ในภาษาไทยจะแตกต่าง
- สำหรับภาษาไทย, 1 ข้อความ SMS จะมีขนาดไม่เกิน 70 ตัวอักษร (รวมเว้นวรรค)
- หากข้อความยาวเกิน 70 ตัวอักษร, จะถือเป็น 2 ข้อความหรือมากกว่า ตามจำนวนตัวอักษรที่มี
ดังนั้น, การคำนวณจำนวนข้อความ SMS สำหรับข้อความที่รวมทั้งภาษาอังกฤษและภาษาไทย
จะต้องพิจารณาตามกฎดังกล่าวเพื่อคำนวณได้อย่างถูกต้อง. แต่ละภาษามีการคำนวณต่างกัน
ดังที่กล่าวไว้ข้างต้น และความยาวของข้อความอาจมีผลต่อจำนวนข้อความ SMS ที่ต้องใช้
ในการส่งข้อความนั้นๆด้วย ดังนั้น ควรระมัดระวังในการคำนวณและส่งข้อความที่มีจำนวนอักขระมากๆ
ในภาษาไทยหรือภาษาอังกฤษ.
ตัวอย่างโค้ด
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SMS Character Count</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<style>
.container {
margin-top: 50px;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="textInput">Input Text:</label>
<textarea class="form-control" id="textInput" rows="4" oninput="countSMS(this.value)"></textarea>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="smsCount">SMS Count:</label>
<input type="text" class="form-control" id="smsCount" readonly>
</div>
<div class="form-group">
<label for="charCount">Character Count (with spaces):</label>
<input type="text" class="form-control" id="charCount" readonly>
</div>
<div class="form-group">
<label for="charCountNoSpaces">Character Count (without spaces):</label>
<input type="text" class="form-control" id="charCountNoSpaces" readonly>
</div>
<div class="form-group">
<label for="spaceCount">Space Count:</label>
<input type="text" class="form-control" id="spaceCount" readonly>
</div>
<div class="form-group">
<label for="thaiCharCount">Thai Character Count:</label>
<input type="text" class="form-control" id="thaiCharCount" readonly>
</div>
<div class="form-group">
<label for="englishCharCount">English Character Count:</label>
<input type="text" class="form-control" id="englishCharCount" readonly>
</div>
<div class="form-group">
<label for="language">Language:</label>
<input type="text" class="form-control" id="language" readonly>
</div>
</div>
</div>
</div>
<script>
function countSMS(text) {
// ช่วงของรหัส Unicode ที่ใช้แทนตัวอักษรภาษาไทย: 0x0E00 - 0x0E7F
const thaiRegex = new RegExp("[\u0E00-\u0E7F]", "g");
// นับเฉพาะจำนวนตัวอักษรภาษาไทย รวมช่องว่างด้วย
const thaiCharCount = (text.match(thaiRegex) || []).length;
// ช่วงของรหัส Unicode ที่ใช้แทนตัวอักษรภาษาอังกฤษ: 0x0020 - 0x007E
const englishRegex = new RegExp("[\u0020-\u007E]", "g");
// นับเฉพาะจำนวนตัวอักษรภาษาอังกฤษ รวมช่องว่างด้วย
const englishCharCount = (text.match(englishRegex) || []).length;
// นับเฉพาะจำนวนช่องว่างในข้อความ
const spaceCount = (text.match(/\s/g) || []).length;
// ลบช่องว่างออกก่อนนำไปตรวจสอบว่ามีภาษาไทย หรือภาษาอังกฤษ กี่ตัวอักษร
const textWithoutSpaces = text.replace(/\s/g, '');
// นับเฉพาะจำนวนตัวอักษรภาษาไทย ไม่รวมช่องว่างด้วย
const thaiCharCountNoSpaces = (textWithoutSpaces.match(thaiRegex) || []).length;
// นับเฉพาะจำนวนตัวอักษรภาษาอังกฤษ ไม่รวมช่องว่างด้วย
const englishCharCountNoSpaces = (textWithoutSpaces.match(englishRegex) || []).length;
// นับจำนวนตัวอักษรทั้งหมดในข้อความ รวมช่องว่างด้วย
const totalCharCount = thaiCharCountNoSpaces + englishCharCountNoSpaces + spaceCount;
// ตรวจสอบภาษา
let language;
// ค่าพื้นฐานการแยกจำนวน ข้อความ sms ค่าเริ่มต้นเป็น 70 รองรับแบบผสม และภาษาไทยอย่างเดียว
let base_calculate = 70;
if (thaiCharCountNoSpaces === 0) { // ถ้าไม่มีภาษาไทยเลย
language = "English"; // เป็นภาษาอังกฤษอย่างเดียว
base_calculate = 160;
} else if (englishCharCountNoSpaces === 0) { // ไม่มีภาษาอังกฤษเลย
language = "Thai"; // เป็นภาษาไทยอย่างเดียว
} else {
language = "Mixed"; // เป็นแบบผสมไทย อังกฤษ
}
// คำนวณจำนวน SMS
// ถ้าภาษาไทยใช้: 70, ภาษาอังกฤษใช้: 160
const smsCount = Math.ceil(totalCharCount / base_calculate);
// นำค่าไปแสดง
document.getElementById("smsCount").value = smsCount;
document.getElementById("charCount").value = totalCharCount;
document.getElementById("charCountNoSpaces").value = totalCharCount - spaceCount;
document.getElementById("spaceCount").value = spaceCount;
document.getElementById("thaiCharCount").value = thaiCharCountNoSpaces;
document.getElementById("englishCharCount").value = englishCharCountNoSpaces;
document.getElementById("language").value = language;
}
</script>
</body>
</html>
ตัวอย่างข้อความสำหรับทดสอบ
Hello, how are you? // ภาษาอังกฤษอย่างเดียว สวัสดี ยินดีที่ได้รู้จักครับ // ภาษาไทยอย่างเดียว Hello สวัสดี // แบบผสมไทย อังกฤษ