Skip to main content
Inspiring
December 20, 2019
Answered

count amount of enters in a multiline field

  • December 20, 2019
  • 2 replies
  • 979 views

Hi,

 

I have created a code to find whether a new line has been created in a multiline text field which is working well. Although what i really want to do is to count how many a new line has actually been input. For the life of me i cant quite figure it out.

 

I am pretty good with javascript, but the calculation logic for counting the quantity of a specific thing in a field is a bit above my head. Any help would be appreciated.

 

The example below is script that i have started building, but i cant get it to work. There are no errors in the JS console but the field i put this calculation in only says "undefined"

var ENT = this.getField("multiline test").value.toString().search("\r")!=-1;

for (var i=0; i < ENT; i++){
event.target.value = ENT.value;
}

 

This topic has been closed for replies.
Correct answer Thom Parker

Here is a very simple method using regular expressions.

 

var aRslt = this.getField("multiline test").valueAsString.match(/\r/gm);
var nCnt = aRslt?aRslt.length:0;

 

2 replies

Trent_PEAuthor
Inspiring
December 23, 2019

Wow Thom, That is amazing. I dont think i would have ever gotten there myself so thank you. 

 

Will have to do a bit more research into the .match line of things. Do you have any good reference material as to the meaning of the "gm" in the match parameters. that way i know how i can do more in the future.

 

This is what i built with your help. I have created a code for adjusting the font size in a multiline field based on the amount of times enter has been hit. Is extremely useful for me for a customer form where most addresses are 2 lines but on occation 3 or more. 

var aRslt = event.target.valueAsString.match(/\r/gm);
var nCnt = aRslt?aRslt.length:0;

if ( nCnt == 0   // when field is empty set text size to auto
     ||          // OR
     nCnt >= 2) // when field has less than X number enters (eg 10)
{
    event.target.textSize = 0;   // text size set to auto
}else{
    event.target.textSize = 18;  // text size wanted.
}

 

Hopefully something like this could help someone else in the future. I couldnt find any code like in throughout the forums. Only script based on total character length rather than enters used.

 

Thanks again! 

Thom Parker
Community Expert
Community Expert
December 23, 2019

Here's an article that has a couple of good links at the bottom.

https://acrobatusers.com/tutorials/text-matching-regular-expressions

 

Also just google "Regular Expression"

 

 

Thom Parker - Software Developer at PDFScriptingUse the Acrobat JavaScript Reference early and often
Trent_PEAuthor
Inspiring
December 23, 2019

Thanks Thom.

 

I read your article. Very informative.

 

Also found a link with a more detailed explanation of each delimitation it was in regards to trimming but now, Specifically i now understand the gm which is great.

 

/ Regex separator

First Alternative ^\s+

  • ^ asserts position at start of a line
  • \s+ matches any whitespace character (equal to [\r\n\t\f\v ])
  • + Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)

Second Alternative \s+$

  • \s+ matches any whitespace character (equal to [\r\n\t\f\v ])
  • + Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
  • $ asserts position at the end of a line

Global pattern flags

  • g modifier: global. All matches (don't return after first match)
  • m modifier: multi line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)

You can read more details on regex101.com.

Function explanation

The function call return x.replace(/^\s+|\s+$/gm,''); searches for any spaces from the beginning of the string and from the end of string. If found then it is replaced by empty string ''. Simply said it does the trim whitespace characters:

  • \n carriage return (ASCII 13)
  • \r line-feed (newline) character (ASCII 10)
  • \t tab character (ASCII 9)
  • \f form-feed character (ASCII 12)
  • \v any vertical whitespace character

 

Thanks again and Merry Christmas. You just helped me finish my work early so i can now enjoy mine! haha

Thom Parker
Community Expert
Thom ParkerCommunity ExpertCorrect answer
Community Expert
December 20, 2019

Here is a very simple method using regular expressions.

 

var aRslt = this.getField("multiline test").valueAsString.match(/\r/gm);
var nCnt = aRslt?aRslt.length:0;

 

Thom Parker - Software Developer at PDFScriptingUse the Acrobat JavaScript Reference early and often