File tree Expand file tree Collapse file tree 3 files changed +105
-0
lines changed Expand file tree Collapse file tree 3 files changed +105
-0
lines changed Original file line number Diff line number Diff line change 1+ const textInput = document . querySelector ( ".text-input" ) ;
2+ const worldCountElement = document . querySelector ( ".word-count" ) ;
3+ const letterCountElement = document . querySelector ( ".letter-count" ) ;
4+ const spaceCountElement = document . querySelector ( ".space-count" ) ;
5+
6+ const checks = [ atLeastTwoCharacters , abscenceOfThreeConsecutiveCharacters ] ;
7+
8+ function atLeastTwoCharacters ( text ) {
9+ const letters = text . match ( / [ a - z ] / gi) || [ ] ;
10+ return letters . length >= 2 ;
11+ }
12+
13+ function abscenceOfThreeConsecutiveCharacters ( text ) {
14+ for ( const character of text ) {
15+ const occurrences = Array . from ( text ) . filter ( ( v ) => v == character ) . length ;
16+
17+ if ( occurrences >= 3 ) {
18+ return false ;
19+ }
20+ }
21+
22+ return true ;
23+ }
24+
25+ textInput . addEventListener ( "input" , ( ) => {
26+ const splitted = textInput . value . trim ( ) . split ( / [ \s - ] / ) ;
27+ const letterCount = ( textInput . value . match ( / [ a - z ] / gi) || [ ] ) . length ;
28+ const spaceCount = ( textInput . value . match ( / \s + / g) || [ ] ) . length ;
29+ let wordCount = 0 ;
30+
31+ outer: for ( const text of splitted ) {
32+ for ( const check of checks ) {
33+ if ( ! check ( text ) ) {
34+ continue outer;
35+ }
36+ }
37+ wordCount ++ ;
38+ }
39+
40+ worldCountElement . textContent = wordCount ;
41+ letterCountElement . textContent = letterCount ;
42+ spaceCountElement . textContent = spaceCount ;
43+ } ) ;
Original file line number Diff line number Diff line change 1+ < html lang ="en ">
2+ < head >
3+ < meta charset ="UTF-8 " />
4+ < meta http-equiv ="X-UA-Compatible " content ="IE=edge " />
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 " />
6+ < title > Word Counter</ title >
7+ < link rel ="stylesheet " href ="style.css " />
8+ </ head >
9+ < body >
10+ < section class ="container ">
11+ < h2 class ="title "> Word Counter</ h2 >
12+ < textarea class ="text-input " placeholder ="Paste text here... "> </ textarea >
13+ < section >
14+ < strong > Word Count: </ strong >
15+ < span class ="word-count "> 0</ span >
16+ </ section >
17+ < section >
18+ < strong > Letter Count: </ strong >
19+ < span class ="letter-count "> 0</ span >
20+ </ section >
21+ < section >
22+ < strong > Number Of Spaces: </ strong >
23+ < span class ="space-count "> 0</ span >
24+ </ section >
25+ </ section >
26+
27+ < script src ="app.js "> </ script >
28+ </ body >
29+ </ html >
Original file line number Diff line number Diff line change 1+ body {
2+ margin : 0 ;
3+ font-family : sans-serif;
4+ display : flex;
5+ flex-direction : column;
6+ justify-content : center;
7+ align-items : center;
8+ height : 100vh ;
9+ }
10+
11+ .container {
12+ width : 400px ;
13+ margin : 25px ;
14+ padding : 25px ;
15+ border : 1px solid # ccc ;
16+ border-radius : 5px ;
17+ line-height : 1.4 ;
18+ box-shadow : 2px 1px 5px 1px ;
19+ }
20+
21+ .title {
22+ margin-top : 0 ;
23+ margin-bottom : 25px ;
24+ }
25+
26+ .text-input {
27+ width : 100% ;
28+ height : 225px ;
29+ margin-bottom : 25px ;
30+ resize : none;
31+ padding : 10px ;
32+ box-sizing : border-box;
33+ }
You can’t perform that action at this time.
0 commit comments