From 4289ad1a0e09f81789e1609926a0c28c99dd876c Mon Sep 17 00:00:00 2001
From: Ratnadeep Rajendra Kharade <92khra1mst@hft-stuttgart.de>
Date: Tue, 27 Oct 2020 14:47:33 +0100
Subject: [PATCH] added function to calculate text length without special
 characters

---
 public/index.js | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/public/index.js b/public/index.js
index f661105..0395eb9 100644
--- a/public/index.js
+++ b/public/index.js
@@ -33,11 +33,18 @@ function toggleElement(id) {
 // and sets number of characters to property textLength on inputObj
 function handleTextAreaChange() {
     let value = document.getElementById("manual-text-entry").value;
-    value = value.trim();
     inputObj.text = value;
-    let characters = value.split(' ').join('').length;
+    value = removeSpecialCharacters(value);
+    let characters = value.length;
     setCharacterLength(characters);
-    document.getElementById("calculatedTextCharacters").setAttribute('value', characters)
+    document.getElementById("calculatedTextCharacters").setAttribute('value', characters);
+}
+
+// function removeSpecialCharacters: removes punctuation marks and other special characters
+// but allows numbers and alphabets along with language specific characters German: äöüÄÖÜß and French: ùûüÿàâæéèêëïîôœÙÛÜŸÀÂÆÉÈÊËÏÎÔŒ
+function removeSpecialCharacters(str) {
+    return str.replace(/(?!\w|\ä|\ö|\ü|\Ä|\Ö|\Ü|\ß|\ù|\û|\ü|\ÿ|\à|\â|\æ|\é|\è|\ê|\ë|\ï|\î|\ô|\œ|\Ù|\Û|\Ÿ|\À|\Â|\Æ|\É|\È|\Ê|\Ë|\Ï|\Î|\Ô|\Œ)./g, '')  // regex to remove special characters 
+        .replace(/^(\s*)([\W\w]*)(\b\s*$)/g, '$2');   // regex to trim the string to remove any whitespace at the beginning or the end
 }
 
 
@@ -123,18 +130,18 @@ function calculateReadingTime() {
         console.log(inputObj);
 
         // TODO: logic or algorithm for calculating reading time goes here
-            // inputObj.textLength has number of characters (number data type)
-            // inputObj.readerLevel has level of reader (number data type)
-            // inputObj.readerCategory has category of reader (number data type)
+        // inputObj.textLength has number of characters (number data type)
+        // inputObj.readerLevel has level of reader (number data type)
+        // inputObj.readerCategory has category of reader (number data type)
+
 
-            
         // example calculation
         x = (inputObj.textLength * inputObj.readerLevel * inputObj.readerCategory);
 
 
-    
+
         // set value to html element
-        var s= document.getElementById('reading-time-element');
+        var s = document.getElementById('reading-time-element');
         s.innerHTML = x;
         // display html element which shows time
         let element = document.getElementById('calculate-time-element');
-- 
GitLab