...

View Full Version : Help!!! RegExp for any printable characters



oldflint
04-08-2003, 10:01 PM
Apparently got stuck with the simple task to validate an entry with any PRINTABLE characters (ASCII between 32 and 126) using search (or any other) method. Something like:

if (str.search( . . . ) != -1)
return true;
else
return false;

I was thinking more like using Predefined Sets, i.e. [print:]
or [:graph:]. but nobody really gives any examples of syntax with those things.

Any idea would be greatly appreciated!!!

beetle
04-08-2003, 11:47 PM
How about the whole string method for ya?
String.prototype.isPrintable = function()
{
var pat = '';
for ( var i = 32; i <= 126; i++ )
{
pat += "\\x" + i.toString(16);
}
var regex = new RegExp( "[^" + pat + "]" );
return ( !regex.test( this ) )
}

liorean
04-09-2003, 12:00 AM
String.prototype.isPrintable=function(){
var re=/^[\x20-\x7e]*$/;
return re.test(this);
} Would be much more efficient than what Beetle wrote.

beetle
04-09-2003, 12:01 AM
Ooh, ranges with ascii chars. Missed that one.

Nice liorean :thumbsup:

Is it better to test the entire string for compliancy, or let the regex look at the compliancy of each char? (if you follow me, using a negated character set)
String.prototype.isPrintable=function(){
var re=/[^\x20-\x7e]$/;
return !re.test(this);
}

liorean
04-09-2003, 12:11 AM
Well, actually I realised that your code would work in any case, since you would have returned true only if no character without the range existed in it. I just used my start and end from my habit of making sure the whole string is checked. This would actually be more efficient:
String.prototype.isPrintable=function(){
var re=/[^ -~]/;
return !re.test(this);
}

(Your last code wouldn't - you check for a negated charset followed by end of string.)

oldflint
04-09-2003, 12:12 AM
Wow!

Thank you gentlemen big time!

But say, I gotta take care about a different locale. Not only Latin alphabet. does anybody know how to use those predefined sets, i.e. [:print:] or [:graph:], etc.?

THANKS AGAIN!!!

liorean
04-09-2003, 12:13 AM
JavaScript doesn't handle the predefined sets, just a subset of PCRE. You'll have to specify the ranges for the characters in question.

beetle
04-09-2003, 12:13 AM
Originally posted by liorean
(Your last code wouldn't - you check for a negated charset followed by end of string.) Oops, that was a typo.

oldflint
04-09-2003, 12:32 AM
Thank you again, gentlemen!

Choopernickel
04-09-2003, 03:17 PM
You have no chance make your time!


(sorry... I'll get my coat on the way out...)



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum