The Web Design Group

... Making the Web accessible to all.

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Issues with Javascript Replace
kspn
post Apr 27 2009, 01:00 AM
Post #1





Group: Members
Posts: 3
Joined: 27-April 09
Member No.: 8,448



Hi,

I am trying to get the values form a Textarea, replace any returns with '. ' and also ensure that there are no duplicates (ie) '.. ' or '. . '

So far I am having weird results. blink.gif

CODE

ProductOI = document.getElementById('ProductOI').value;
ProductOI = ProductOI.replace(/\n/g, '\. ');
ProductOI = ProductOI.replace(/\.\. /g, '\. ');
ProductOI = ProductOI.replace(/\. \. /g, '\. ');


The 'NewLine' code is working but the other two for some reason are not working as I am expecting them too. blink.gif
Each line of code run independently seems to work as expected, but when combined it fails.

Any assistance would be appreciated.


--------------------
No Coffee, No Workee
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
kspn
post Apr 27 2009, 01:55 AM
Post #2





Group: Members
Posts: 3
Joined: 27-April 09
Member No.: 8,448



Solved!!

Windows was adding \r to it as well, so the following code works.

CODE

ProductOI = ProductOI.replace(/\n/g, '\. ')
ProductOI = ProductOI.replace(/\r/g, '')
ProductOI = ProductOI.replace(/\.\. /g, '\. ')
ProductOI = ProductOI.replace(/\. \. /g, '\. ')

blush.gif


--------------------
No Coffee, No Workee
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Christian J
post Apr 27 2009, 08:27 AM
Post #3


.
********

Group: WDG Moderators
Posts: 6,155
Joined: 10-August 06
Member No.: 7



Multiple newlines like the following:

CODE
<textarea>a




b</textarea>

seem to result in something like "a. . b".

Also, IIRC Mac OS use only \r for newlines, so the script above would not produce any period signs then.





--------------------
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Christian J
post Apr 27 2009, 01:12 PM
Post #4


.
********

Group: WDG Moderators
Posts: 6,155
Joined: 10-August 06
Member No.: 7



QUOTE(Christian J @ Apr 27 2009, 03:27 PM) *

Also, IIRC Mac OS use only \r for newlines, so the script above would not produce any period signs then.

According to http://en.wikipedia.org/wiki/Newline#Representations CR (which corresponds with \r) was used by "Commodore machines, Apple II family, Mac OS up to version 9 and OS-9".


--------------------
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
kspn
post Apr 27 2009, 08:39 PM
Post #5





Group: Members
Posts: 3
Joined: 27-April 09
Member No.: 8,448



QUOTE(Christian J @ Apr 28 2009, 04:12 AM) *

QUOTE(Christian J @ Apr 27 2009, 03:27 PM) *

Also, IIRC Mac OS use only \r for newlines, so the script above would not produce any period signs then.

According to http://en.wikipedia.org/wiki/Newline#Representations CR (which corresponds with \r) was used by "Commodore machines, Apple II family, Mac OS up to version 9 and OS-9".


I have updated the code to the following and it appears to work as I am expecting.

CODE

//Replace NewLine/Line Feed with '. '
ProductOI = ProductOI.replace(/\n\r/g, '\. ')
//Replace NewLines with '. '
ProductOI = ProductOI.replace(/\n/g, '\. ')
//Remove Line Feed with '. '
ProductOI = ProductOI.replace(/\r/g, '\. ')
//Replace '.. ' with '. '
ProductOI = ProductOI.replace(/\.\. /g, '\. ')
//Replace '. . ' with '. '
ProductOI = ProductOI.replace(/\. \. /g, '\. ')


--------------------
No Coffee, No Workee
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Christian J
post Apr 28 2009, 05:02 AM
Post #6


.
********

Group: WDG Moderators
Posts: 6,155
Joined: 10-August 06
Member No.: 7



I'm not good at regex, but I think this:

QUOTE
CODE
ProductOI = ProductOI.replace(/\n\r/g, '\. ')

should be the other way around to catch Windows CR+LF, like this:

CODE
ProductOI = ProductOI.replace(/\r\n/g, '\. ');


Also, these don't remove all occurences:

QUOTE
CODE
//Replace '.. ' with '. '
ProductOI = ProductOI.replace(/\.\. /g, '\. ')
//Replace '. . ' with '. '
ProductOI = ProductOI.replace(/\. \. /g, '\. ')

(is it because each additional pair will be reduced to an additional single, not one in total?). See if these work better:

CODE

// One or more . is replaced with a single
ProductOI = ProductOI.replace(/(\.)+/g, '\. ');
ProductOI = ProductOI.replace(/(\. )+/g, '\. ');

Still if the user inserts blank spaces between newlines it will prevent the removal of duplicates. Not sure how to remove spaces safely since the \s special character also catches newlines.

I'm not sure if the escaping backslash is necessary when using quotes and/or parenthese, but it doesn't seem to harm anything either. Only tested on Windows.

BTW if you're going to use this is public you may need to re-check at the server-side as well, in case users have disabled JS.


--------------------
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



- Lo-Fi Version Time is now: 25th October 2014 - 07:38 AM