Struggling to create a sentence counter using substr?

Currently, I am working on developing a sentence counter and I am very close to finishing it. I have successfully created one; however, there is an issue that arises when there are multiple occurrences of periods, question marks, or exclamation points, as they are being counted as well.

html

 <input id="counter" type="text" />
<p id="sntnceCounter">Sentence(s):</p>

js

function myFunction() {
  var counter = document.getElementById("counter").value;
  var sentences = document.getElementById("sntnceCounter");

 for (var i = 0; i < counter.length; i++) {
    var currentCharacter = counter.substr(i, 1);
    var nextCharacter = counter.substr(i + 1, 1);
 if (
      (currentCharacter == "." ||
        currentCharacter == "?" ||
        currentCharacter == "!") &&
      (nextCharacter !== "." || nextCharacter !== "?" || nextCharacter !== "!")
    ) {
      console.log((sntnceCount += 1));
    }
  }

  sentences.innerHTML = "Sentence(s):" + sntnceCount;
}

The approach I took to create the sentence counter involved checking if the current character is a period, question mark, or exclamation point, while also ensuring that the subsequent occurrence is not counted. However, it seems to be counting them regardless. Any suggestions on how to resolve this issue would be greatly appreciated.

Apologies for any grammatical errors in my English

Answer №1

Consider making a modification

(nextCharacter !== "." || nextCharacter !== "?" || nextCharacter !== "!")

as below:

(nextCharacter !== "." && nextCharacter !== "?" && nextCharacter !== "!")

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Tips for designing a unique style attribute for your Vue.js component

My goal is to utilize Vue.js without the need for a build step, but I've encountered an issue with its lack of a style property. To tackle this problem, I came up with the idea of creating a custom "style" property on my Vue component instance and dy ...

Order of execution behavior

I am currently working on a function that, when triggered, will populate the webpage with dynamic tiles. These tiles retrieve data from a remote database through an AJAX request and utilize jQuery 3.0 in the implementation. Function Implementation: funct ...

The JQuery-AJAX script in my Django application, intended to show a preset value in a calculated field, is not functioning as expected

Here are a couple of models from my project: class Package(models.Model): patient=models.ForeignKey(Patient, on_delete=CASCADE) diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE) treatment=models.ForeignKey(Treatment, on_delete=CASCADE) ...

Custom HTML form created by Ryan Fait with additional unique elements

My current script for styling checkboxes and radiobuttons is working perfectly: The issue arises when I dynamically add checkboxes and radiobuttons to the page using jQuery. The new elements do not inherit the custom styling. Is there a workaround for th ...

Interactive Canvas Feature: Drag and Drop Across Various Objects in HTML 5

I have developed a custom code that enables the creation and rendering of objects on an HTML5 canvas. class Rectangle extends Shape { constructor(options, canvas, type = 'rectangle') { super(...); // inherited from the super class thi ...

What is the best way to access the element menu with element-ui?

I am looking for a way to programmatically open an element in my menu, but I haven't been able to find any information on how to do it. HTML <script src="//unpkg.com/vue/dist/vue.js"></script> <script src="//unpkg.com/<a hr ...

Is it possible to pass function attributes through a single function in Javascript?

I'm currently trying to determine the most effective method to indicate that the game has ended. I have my gameover() function function gameover(chk, scoreOne, scoreTwo) { if (chk === true) { // Game over // Displ ...

What changes can I make to the script in order to display every element from a MySQL query using PHP, MySQL, JavaScript,

Enhanced Multiple Dropdown Selection Using Ajax In the following scenario, we have a webpage featuring a multiple dropdown selection that interacts with a MySQL database. By choosing options in the dropdowns labeled site, menu, and category (categ), a que ...

Mastering the ng-if directive in Angular can help you easily display or hide content based on boolean

Having trouble figuring out what to insert in the last span element where it mentions "I_DO_NOT_KNOW", here is the markup provided: <div class="row"> <div class="key" translate>Label</div> <div class="value form-group"> < ...

Sending a post request with data to an ExpressJS server resulted in a 404 error indicating that the server

My setup includes a React frontend communicating with my own ExpressJS API backend running version 4.16.0. Currently, using the fetch method in the React frontend to retrieve data is functioning properly: fetch('/desResData') .then(res = ...

Converting to HTML character entities and converting back again

Whenever I replace text in my chat room, it shows up as HTML Character Entities in the box. However, I want it to display the actual characters typed in when shown in the chat room. To achieve this, I am using the following code to prevent any HTML from be ...

Next and previous buttons on Bootstrap carousel are not functioning properly with certain pop-up modals in a React application

Bootstrap Carousel Implementation for Viewing Photo Groups Utilizing a Bootstrap Carousel, I have created a feature to display different groups of photos. Each group of photos can be clicked on to open a Modal, showcasing all the images in a carousel form ...

Seeking a light-weight, text-rich editor specifically designed for use on our enterprise website. This editor should be even lighter than TinyMCE

I am in search of a lightweight text editor for an enterprise website, lighter than tinymce with basic buttons for the comment form. It is imperative that the editor also functions properly in IE6. So far, I have tried cleditor 15KB, but it has an issue in ...

Implementing siteSpeedSampleRate in Google Analytics with AngularJS - a step-by-step guide

I utilized the following link https://github.com/revolunet/angular-google-analytics to incorporate Google Analytics into my AngularJS 1.5 project. However, I'm having trouble setting the siteSpeedSampleRate. I injected the AnalyticsProvider and attemp ...

Extension for Chrome that enhances YouTube video playback experience

I'm struggling to figure out why this isn't functioning. I've reviewed the Google extension dev docs and examined some sample code. Checked various Stack Overflow questions and answers, but haven't received any helpful feedback or res ...

Unable to properly align divs vertically

Having trouble getting some divs to align properly, whether they are in an accordion or not. The current layout is not what I want: My goal is to have them vertically aligned at the top, despite varying lengths. Any help would be appreciated. I attempted ...

Issue with setting position to the right using jQuery CSS

I have a div with the CSS property position:absolute. I am attempting to align it to the right using jQuery, but for some reason it is not working as expected. In the code snippet below, I am removing the left positioning and adding right:0 in order to m ...

Utilize a special JavaScript function to submit a concealed PayPal form

Looking to integrate a call to PayPal within a JavaScript function. The goal is for the PayPal call to occur prior to running myStep1 and myStep2. Check out the function below: function() { // insert PayPal call here, before myStep1 and myStep2 ...

What is the best way to extract function bodies from a string with JavaScript?

I am currently searching for a solution to extract the body of a function declaration by its name from a JavaScript code string within a Node.js environment. Let's assume we have a file named spaghetti.js that can be read into a string. const allJs = ...

Tutorial on implementing a _variables.scss file for Vue components with sass-resource-loader on Vue CLI 3.04

In my VueJs project created with the Vue CLI 3.0.4, I am aiming to utilize SCSS variables across all components without the need to import _variables.scss into each one individually. After some research, I found that I can achieve this using sass-resource- ...