[PHP] preg_match question...

2009-02-06 Thread bruce
hi...

trying to figure out the best approach to using preg_match to extract the
number from the follwing type of line...

 131646 sometext follows..

basically, i want to extract the number, without the text, but i have to be
able to match on the text

i've been playing with different preg_match regexs.. but i'm missing
something obvious!

thoughts/comments..


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question...

2009-02-06 Thread Alpár Török
preg_match('/^([0-9]+) (.)+/',$sString,$aMatches);

Matches will be 1 = the number ; 2 = the text. The expression only matches
if there is any character after the space.  Not necessarily text, it might
be another number or special characters

2009/2/6 bruce bedoug...@earthlink.net

 hi...

 trying to figure out the best approach to using preg_match to extract the
 number from the follwing type of line...

  131646 sometext follows..

 basically, i want to extract the number, without the text, but i have to be
 able to match on the text

 i've been playing with different preg_match regexs.. but i'm missing
 something obvious!

 thoughts/comments..


 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php




-- 
Alpar Torok


Re: [PHP] preg_match question...

2009-02-06 Thread Jim Lucas
bruce wrote:
 hi...
 
 trying to figure out the best approach to using preg_match to extract the
 number from the follwing type of line...
 
  131646 sometext follows..
 
 basically, i want to extract the number, without the text, but i have to be
 able to match on the text
 
 i've been playing with different preg_match regexs.. but i'm missing
 something obvious!
 
 thoughts/comments..
 
 

Why don't you show us some of the attempts that you have tried that didn't work.

When you say that you need to match on some of the text, give us an example of 
the text that you are trying to match.

And give us examples of the input text you are trying to match to.

-- 
Jim Lucas

   Some men are born to greatness, some achieve greatness,
   and some have greatness thrust upon them.

Twelfth Night, Act II, Scene V
by William Shakespeare

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] preg_match question

2004-08-18 Thread Nicklas Bondesson
Hello,

How do I find an exact match of a string with preg_match?

Example:

String1:  www.test.com/
String2: www.test.com/somepage.php?param1=true

How do you write the regexp to only return String1 and not String2 when you
match against www.test.com ??

Thanks in advance.

Nicke

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question

2004-08-18 Thread John Legg
Try using a pattern set to the following:

$pattern = /^www.test.com$/;

and refer to: http://uk.php.net/manual/en/reference.pcre.pattern.syntax.php

Rgds

John

---


Hello,

How do I find an exact match of a string with preg_match?

Example:

String1:  www.test.com/
String2: www.test.com/somepage.php?param1=true

How do you write the regexp to only return String1 and not String2 when 
you
match against www.test.com ??

Thanks in advance.

Nicke

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: [PHP] preg_match question

2004-08-18 Thread Matt M.
On Wed, 18 Aug 2004 17:16:24 +0200, Nicklas Bondesson [EMAIL PROTECTED] wrote:
 Hello,
 
 How do I find an exact match of a string with preg_match?
 
 Example:
 
 String1:  www.test.com/
 String2: www.test.com/somepage.php?param1=true
 
 How do you write the regexp to only return String1 and not String2 when you
 match against www.test.com ??

$pattern = '/^www\.test\.com\/$/';

preg_match($pattern, YOUR STRING)

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] preg_match question

2004-08-18 Thread Nicklas Bondesson
Is it clever to use word boundary here? /b?

Nicke 



From: John Legg [mailto:[EMAIL PROTECTED] 
Sent: den 18 augusti 2004 18:02
To: Nicklas Bondesson
Cc: [EMAIL PROTECTED]
Subject: Re: [PHP] preg_match question


Try using a pattern set to the following:

$pattern = /^www.test.com$/;

and refer to: http://uk.php.net/manual/en/reference.pcre.pattern.syntax.php

Rgds

John

---

 
Hello,

How do I find an exact match of a string with preg_match?

Example:

String1:  www.test.com/
String2: www.test.com/somepage.php?param1=true

How do you write the regexp to only return String1 and not String2 when 
you
match against www.test.com ??

Thanks in advance.

Nicke

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] preg_match question

2004-08-18 Thread John Legg
Hi Nicke

Difficult to say without knowing exactly what you are trying to achieve.  If you are 
just comparing two strings for 'exactness' then it would probably be better to just do 
a direct string comparison (without regex).  Regex's are generally more expensive 
operations.

One thing you should do is escape the . portion of the URL you are comparing.  As 
. matches any character except newline.  So it should be: $pattern = 
/^www\.test\.com$/;

If you tell me what you are trying to achieve, I might be able to advise further.

Rgds

John

---






Is it clever to use word boundary here? /b?

Nicke 



From: John Legg [mailto:[EMAIL PROTECTED] 
Sent: den 18 augusti 2004 18:02
To: Nicklas Bondesson
Cc: [EMAIL PROTECTED]
Subject: Re: [PHP] preg_match question


Try using a pattern set to the following:

$pattern = /^www.test.com$/;

and refer to: 
http://uk.php.net/manual/en/reference.pcre.pattern.syntax.php

Rgds

John

---

 
Hello,

How do I find an exact match of a string with preg_match?

Example:

String1:  www.test.com/
String2: www.test.com/somepage.php?param1=true

How do you write the regexp to only return String1 and not String2 when 
you
match against www.test.com ??

Thanks in advance.

Nicke

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


RE: [PHP] preg_match question

2004-08-18 Thread Nicklas Bondesson
Actually I think I got it working now (without escaping the .).

If I run into trouble I will post again.

Thanks!

Nicke 



From: John Legg [mailto:[EMAIL PROTECTED] 
Sent: den 18 augusti 2004 18:15
To: Nicklas Bondesson
Cc: [EMAIL PROTECTED]
Subject: RE: [PHP] preg_match question


Hi Nicke
 
Difficult to say without knowing exactly what you are trying to achieve.  If
you are just comparing two strings for 'exactness' then it would probably be
better to just do a direct string comparison (without regex).  Regex's are
generally more expensive operations.
 
One thing you should do is escape the . portion of the URL you are
comparing.  As . matches any character except newline.  So it should be:
$pattern = /^www\.test\.com$/;
 
If you tell me what you are trying to achieve, I might be able to advise
further.
 
Rgds
 
John
 
---
 

 
 
 
Is it clever to use word boundary here? /b?

Nicke 



From: John Legg [mailto:[EMAIL PROTECTED]
http://uk.f251.mail.yahoo.com/ym/[EMAIL PROTECTED]YY=19751orde
r=downsort=datepos=0view=ahead=b ] 
Sent: den 18 augusti 2004 18:02
To: Nicklas Bondesson
Cc: [EMAIL PROTECTED]
http://uk.f251.mail.yahoo.com/ym/[EMAIL PROTECTED]YY=19
751order=downsort=datepos=0view=ahead=b 
Subject: Re: [PHP] preg_match question


Try using a pattern set to the following:

$pattern = /^www.test.com$/;

and refer to: 
http://uk.php.net/manual/en/reference.pcre.pattern.syntax.php

Rgds

John

---


Hello,

How do I find an exact match of a string with preg_match?

Example:

String1:  www.test.com/
String2: www.test.com/somepage.php?param1=true

How do you write the regexp to only return String1 and not String2 when 
you
match against www.test.com ??

Thanks in advance.

Nicke

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question

2004-08-18 Thread Curt Zirzow
* Thus wrote Nicklas Bondesson:
 Actually I think I got it working now (without escaping the .).

cause . is any character

wwwatestbcom  will get matched as well.



Curt
-- 
First, let me assure you that this is not one of those shady pyramid schemes
you've been hearing about.  No, sir.  Our model is the trapezoid!

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question

2004-08-18 Thread John Holmes
Nicklas Bondesson wrote:
How do I find an exact match of a string with preg_match?
Example:
String1:  www.test.com/
String2: www.test.com/somepage.php?param1=true
How do you write the regexp to only return String1 and not String2 when you
match against www.test.com ??
I've heard == works well. Or strcmp(), etc...
--
---John Holmes...
Amazon Wishlist: www.amazon.com/o/registry/3BEXC84AB3A5E/
php|architect: The Magazine for PHP Professionals  www.phparch.com
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: [PHP] preg_match question

2004-07-21 Thread John Van Pelt
Thank you both Jason and Curt...
Looks like I was pretty close...

In fact, I found a fault in my logic, too, that meant only some but not all
instances of $element were being validated, even after i got the preg
function right! But it's all working great now.

- john

 
  As John has previously suggested the best way to go about this is to
remove
  anything which is not in the set of acceptable characters, which for the
  above is:
 
$new = preg_replace('/[^A-Za-z-\()\s]/', '', $old);
 
  Then check that $new is not empty().

 or if $new != $old, bad characters exist.


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] preg_match question

2004-07-20 Thread John Van Pelt
I am a semi-newbie at php and a complete newbie to regex

What am I doing wrong here?

function isWord($element) {
 return !preg_match (/[^A-Za-z\-\(\)\s]/, $element);
}

I want to test the string $element and make sure that it contains nothing
but:
- characters A-Z
- characters a-z
- hyphen
- parentheses (open and close)
- space character or its equivalent

Another issue that may be related to the problem (in case my function above
is correct, which I doubt), is that $element is being returned as a $_POST
value from a form field... and it CAN be empty. Will my function choke on
that? Do i need to test separately for ''?

Thanks in advance,
-john

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question

2004-07-20 Thread Jason Wong
On Wednesday 21 July 2004 10:04, John Van Pelt wrote:

 function isWord($element) {
  return !preg_match (/[^A-Za-z\-\(\)\s]/, $element);
 }

 I want to test the string $element and make sure that it contains nothing
 but:
 - characters A-Z
 - characters a-z
 - hyphen
 - parentheses (open and close)
 - space character or its equivalent

As John has previously suggested the best way to go about this is to remove 
anything which is not in the set of acceptable characters, which for the 
above is:

  $new = preg_replace('/[^A-Za-z-\()\s]/', '', $old);

Then check that $new is not empty().

-- 
Jason Wong - Gremlins Associates - www.gremlins.biz
Open Source Software Systems Integrators
* Web Design  Hosting * Internet  Intranet Applications Development *
--
Search the list archives before you post
http://marc.theaimsgroup.com/?l=php-general
--
/*
Finagle's Seventh Law:
The perversity of the universe tends toward a maximum.
*/

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question

2004-07-20 Thread Curt Zirzow
* Thus wrote Jason Wong:
 On Wednesday 21 July 2004 10:04, John Van Pelt wrote:
 
  function isWord($element) {
   return !preg_match (/[^A-Za-z\-\(\)\s]/, $element);
  }
 
  I want to test the string $element and make sure that it contains nothing
  but:
  - characters A-Z
  - characters a-z
  - hyphen
  - parentheses (open and close)
  - space character or its equivalent
 
 As John has previously suggested the best way to go about this is to remove 
 anything which is not in the set of acceptable characters, which for the 
 above is:
 
   $new = preg_replace('/[^A-Za-z-\()\s]/', '', $old);
 
 Then check that $new is not empty().

or if $new != $old, bad characters exist.


Curt
-- 
First, let me assure you that this is not one of those shady pyramid schemes
you've been hearing about.  No, sir.  Our model is the trapezoid!

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] Preg_match question

2004-05-29 Thread Dave Carrera
Hi List,

I have managed to list files on my website using a combination of
preg_match_all and str_replace in an array.

What I would like to know is how do I lift out of a a tag the contents
from href=.

Example:

Link returned = a href=./somepage.phpOf to some page/a

The bit I want to play with is ./somepage.php.

I think it might be something to do with another preg of some kind but I can
not work it our so I ask for help from the list.

Thank you in advance for any help or guidance you my give

Dave C

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.691 / Virus Database: 452 - Release Date: 26/05/2004
 

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Preg_match question

2004-05-29 Thread Jeroen Serpieters
On Sat, 29 May 2004, Dave Carrera wrote:


 Link returned = a href=./somepage.phpOf to some page/a

 The bit I want to play with is ./somepage.php.


$str = 'a href=./somepage.phpOf to some page/a';

if( preg_match(/a href=\(.*)\/Ui, $str, $matches) )
echo $matches[1];
else
echo string didn't match;

-- 
Jeroen

Always code as if the guy who ends up maintaining your code will be a violent 
psychopath who knows where you live.
-- Martin Golding

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] Preg_match question

2004-05-29 Thread Marco Tabini
I guess the simplest would be to use preg_match_all on 

'/a +href=([^]+)/i'

Assuming that all your links are in that format, this will extract all the
contents of the href portion of the links in your string. There was a regex
series on our magazine that also covered more complex examples of this kind.

Cheers,


Marco

--
php|architect - The Magazine for PHP Professionals
http://www.phparch.com -- Get your free issue today!

 -Original Message-
 From: Dave Carrera [mailto:[EMAIL PROTECTED]
 Sent: May 29, 2004 4:30 AM
 To: [EMAIL PROTECTED]
 Subject: [PHP] Preg_match question
 
 Hi List,
 
 I have managed to list files on my website using a combination of
 preg_match_all and str_replace in an array.
 
 What I would like to know is how do I lift out of a a tag the contents
 from href=.
 
 Example:
 
 Link returned = a href=./somepage.phpOf to some page/a
 
 The bit I want to play with is ./somepage.php.
 
 I think it might be something to do with another preg of some kind but I
 can
 not work it our so I ask for help from the list.
 
 Thank you in advance for any help or guidance you my give
 
 Dave C
 
 ---
 Outgoing mail is certified Virus Free.
 Checked by AVG anti-virus system (http://www.grisoft.com).
 Version: 6.0.691 / Virus Database: 452 - Release Date: 26/05/2004
 
 
 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] Preg_match question

2004-05-29 Thread Dave Carrera
Thanks Marco,

I worked it out, with trial and error but I will refine what I have by
reading your examples.

Is there a preg to find a ? in a string since a ? is used for
calculations as I see it.

Thank you and others for all the help with this

Dave Carrera


-Original Message-
From: Marco Tabini [mailto:[EMAIL PROTECTED] 
Sent: 29 May 2004 13:32
To: 'Dave Carrera'; [EMAIL PROTECTED]
Subject: RE: [PHP] Preg_match question


I guess the simplest would be to use preg_match_all on 

'/a +href=([^]+)/i'

Assuming that all your links are in that format, this will extract all the
contents of the href portion of the links in your string. There was a regex
series on our magazine that also covered more complex examples of this kind.

Cheers,


Marco

--
php|architect - The Magazine for PHP Professionals
http://www.phparch.com -- Get your free issue today!

 -Original Message-
 From: Dave Carrera [mailto:[EMAIL PROTECTED]
 Sent: May 29, 2004 4:30 AM
 To: [EMAIL PROTECTED]
 Subject: [PHP] Preg_match question
 
 Hi List,
 
 I have managed to list files on my website using a combination of 
 preg_match_all and str_replace in an array.
 
 What I would like to know is how do I lift out of a a tag the 
 contents from href=.
 
 Example:
 
 Link returned = a href=./somepage.phpOf to some page/a
 
 The bit I want to play with is ./somepage.php.
 
 I think it might be something to do with another preg of some kind but 
 I can not work it our so I ask for help from the list.
 
 Thank you in advance for any help or guidance you my give
 
 Dave C
 
 ---
 Outgoing mail is certified Virus Free.
 Checked by AVG anti-virus system (http://www.grisoft.com).
 Version: 6.0.691 / Virus Database: 452 - Release Date: 26/05/2004
 
 
 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php




---
Incoming mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.691 / Virus Database: 452 - Release Date: 26/05/2004
 

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.691 / Virus Database: 452 - Release Date: 26/05/2004
 

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] Preg_match question

2004-05-29 Thread Marco Tabini
 Is there a preg to find a ? in a string since a ? is used for
 calculations as I see it.
 

You just need to escape it with a backslash, e.g. \?

Good luck,


Marco

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Preg_match question

2004-05-29 Thread Daniel Clark
Great quote Jeroen.

Always code as if the guy who ends up maintaining your code will be a violent 
psychopath who knows where you live.
  -- Martin Golding

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question: locating unmatched HTML tags

2003-02-22 Thread Ernest E Vogelsinger
At 03:35 22.02.2003, Andy Crain said:
[snip]
My apologies in advance if this too basic or there's a solution easily
found out there, but after lots of searching, I'm still lost.

I'm trying to build a regexp that would parse user-supplied text and
identify cases where HTML tags are left open or are not properly
matched-e.g., b tags without closing /b tags. This is for a sort of
message board type of application, and I'd like to allow users to use
some HTML, but just would like to check to ensure that no stray tags are
input that would screw up the rest of the page's display. I'm new to
regular expressions, and the one below is as far as I've gotten. If
anyone has any suggestions, they'd be very much appreciated.

$suspect_tags = b|i|u|strong|em|font|a|ol|ul|blockquote ;
$pattern = '/(' . $suspect_tags . '[^]*)(.*)(?!\/\1)/Ui';
if (preg_match($pattern,$_POST['entry'],$matches)) {
   //do something to report the unclosed tags
} else {
   echo 'Input looks fine. No unmatched tags.';
}
[snip] 

Hi,

I don't believe you can create a regular expression to look for something
that's NOT there.

I'd take this approach (tested with drawbacks, see below):

function check_tags($text) {
$suspect_tags = b|i|u|strong|em|font|a|ol|ul|blockquote;
$re_find = '/\s*(' . $suspect_tags . ').*?(.*)/is';

while (preg_match($re_find,$text,$matches)) {
// a suspect tag was found, check if closed
$suspect = $matches[1];
$text = $matches[2];
$re_close = '/\s*\/\s*' . $suspect . '\s*?(.*)/is';
if (preg_match($re_close, $text, $matches)) {
// fine, found matching closer, continue loop
$text = $matches[1];
}
else {
// not closed - return to report it
return $suspect;
}
}
return null;
}

$text = EOT
This text contains  font
size=+4  an
unclosed suspect /finttag.

EOT;

$tag = check_tags($text);
if ($tag) echo Unmatched: \$tag\\n;
else echo Perfect!\n;

The drawbacks: This approach is softly targeted at unintended typos, such
as in the example text. It won't catch deliberate attacks, such as
   Blindtext font color=redfont size=+22Hehe I've got you/font
because it is missing the second font opener. To catch these attacks you'd
need to build a source tree of the text in question.

HTH,

-- 
   O Ernest E. Vogelsinger
   (\)ICQ #13394035
^ http://www.vogelsinger.at/



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] preg_match question: locating unmatched HTML tags

2003-02-22 Thread Andy Crain
John,
Thanks. I'm considering that, but the application I'm working on is for
a small intranet that will be for only a small group of supervised
users, so vulnerability isn't such a large concern.
Andy

 -Original Message-
 From: John W. Holmes [mailto:[EMAIL PROTECTED]
 Sent: Saturday, February 22, 2003 1:06 AM
 To: 'Andy Crain'; [EMAIL PROTECTED]
 Subject: RE: [PHP] preg_match question: locating unmatched HTML tags
 
  I'm trying to build a regexp that would parse user-supplied text and
  identify cases where HTML tags are left open or are not properly
  matched-e.g., b tags without closing /b tags. This is for a sort
 of
  message board type of application, and I'd like to allow users to
use
  some HTML, but just would like to check to ensure that no stray tags
 are
  input that would screw up the rest of the page's display. I'm new to
  regular expressions, and the one below is as far as I've gotten. If
  anyone has any suggestions, they'd be very much appreciated.
 
 Letting users enter HTML is a bad idea. Even if you only let them use
 b tags, they can still put ONCLICK and mouseover effects for the
bold
 text to screw with your other users.
 
 Use a BB style code, such as [b] for bold, [i] for italics, etc. This
 way, you only match pairs and replace them with HTML and use
 htmlentities on anything else. This way an unmatched [b] tag won't be
 replaced with b and mess up your code.
 
 ---John W. Holmes...
 
 PHP Architect - A monthly magazine for PHP Professionals. Get your
copy
 today. http://www.phparch.com/
 
 
 
 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] preg_match question: locating unmatched HTML tags

2003-02-22 Thread Andy Crain
Ernest,
Thanks very much. This is pretty close to what I'm looking for. The only
problem is that it doesn't catch nested tags. For example, some btext
/usome/b text some text makes it through without error since, I
think, preg_match resumes matching at the /b after spotting and then
checking its first match, at b.
Andy

 -Original Message-
 From: Ernest E Vogelsinger [mailto:[EMAIL PROTECTED]
 Sent: Saturday, February 22, 2003 5:48 AM
 To: Andy Crain
 Cc: [EMAIL PROTECTED]
 Subject: Re: [PHP] preg_match question: locating unmatched HTML tags
 
 At 03:35 22.02.2003, Andy Crain said:
 [snip]
 My apologies in advance if this too basic or there's a solution
easily
 found out there, but after lots of searching, I'm still lost.
 
 I'm trying to build a regexp that would parse user-supplied text and
 identify cases where HTML tags are left open or are not properly
 matched-e.g., b tags without closing /b tags. This is for a sort
of
 message board type of application, and I'd like to allow users to use
 some HTML, but just would like to check to ensure that no stray tags
are
 input that would screw up the rest of the page's display. I'm new to
 regular expressions, and the one below is as far as I've gotten. If
 anyone has any suggestions, they'd be very much appreciated.
 
 $suspect_tags = b|i|u|strong|em|font|a|ol|ul|blockquote ;
 $pattern = '/(' . $suspect_tags . '[^]*)(.*)(?!\/\1)/Ui';
 if (preg_match($pattern,$_POST['entry'],$matches)) {
//do something to report the unclosed tags
 } else {
echo 'Input looks fine. No unmatched tags.';
 }
 [snip]
 
 Hi,
 
 I don't believe you can create a regular expression to look for
something
 that's NOT there.
 
 I'd take this approach (tested with drawbacks, see below):
 
 function check_tags($text) {
 $suspect_tags = b|i|u|strong|em|font|a|ol|ul|blockquote;
 $re_find = '/\s*(' . $suspect_tags . ').*?(.*)/is';
 
 while (preg_match($re_find,$text,$matches)) {
 // a suspect tag was found, check if closed
 $suspect = $matches[1];
 $text = $matches[2];
 $re_close = '/\s*\/\s*' . $suspect . '\s*?(.*)/is';
 if (preg_match($re_close, $text, $matches)) {
 // fine, found matching closer, continue loop
 $text = $matches[1];
 }
 else {
 // not closed - return to report it
 return $suspect;
 }
 }
 return null;
 }
 
 $text = EOT
 This text contains  font
 size=+4  an
 unclosed suspect /finttag.
 
 EOT;
 
 $tag = check_tags($text);
 if ($tag) echo Unmatched: \$tag\\n;
 else echo Perfect!\n;
 
 The drawbacks: This approach is softly targeted at unintended typos,
such
 as in the example text. It won't catch deliberate attacks, such as
Blindtext font color=redfont size=+22Hehe I've got you/font
 because it is missing the second font opener. To catch these attacks
you'd
 need to build a source tree of the text in question.
 
 HTH,
 
 --
O Ernest E. Vogelsinger
(\)ICQ #13394035
 ^ http://www.vogelsinger.at/
 
 
 
 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] preg_match question: locating unmatched HTML tags

2003-02-22 Thread John W. Holmes
Well, like someone else said, it's hard to look for and match stuff that
isn't there. In addition to the security benefit, it's just easier to
code something that looks for [b](.*)[/b] and replaces those tags with
b and /b (or strong and /strong if you want to be technically
correct). 

Honestly, if you've got a small group of people like you say then just
teach them HTML so they don't make mistakes like this. Or provide a
preview mode so they can double check their work. 

---John W. Holmes...

PHP Architect - A monthly magazine for PHP Professionals. Get your copy
today. http://www.phparch.com/

 -Original Message-
 From: Andy Crain [mailto:[EMAIL PROTECTED]
 Sent: Saturday, February 22, 2003 4:54 PM
 To: [EMAIL PROTECTED]
 Subject: RE: [PHP] preg_match question: locating unmatched HTML tags
 
 John,
 Thanks. I'm considering that, but the application I'm working on is
for
 a small intranet that will be for only a small group of supervised
 users, so vulnerability isn't such a large concern.
 Andy
 
  -Original Message-
  From: John W. Holmes [mailto:[EMAIL PROTECTED]
  Sent: Saturday, February 22, 2003 1:06 AM
  To: 'Andy Crain'; [EMAIL PROTECTED]
  Subject: RE: [PHP] preg_match question: locating unmatched HTML tags
 
   I'm trying to build a regexp that would parse user-supplied text
and
   identify cases where HTML tags are left open or are not properly
   matched-e.g., b tags without closing /b tags. This is for a
sort
  of
   message board type of application, and I'd like to allow users to
 use
   some HTML, but just would like to check to ensure that no stray
tags
  are
   input that would screw up the rest of the page's display. I'm new
to
   regular expressions, and the one below is as far as I've gotten.
If
   anyone has any suggestions, they'd be very much appreciated.
 
  Letting users enter HTML is a bad idea. Even if you only let them
use
  b tags, they can still put ONCLICK and mouseover effects for the
 bold
  text to screw with your other users.
 
  Use a BB style code, such as [b] for bold, [i] for italics, etc.
This
  way, you only match pairs and replace them with HTML and use
  htmlentities on anything else. This way an unmatched [b] tag won't
be
  replaced with b and mess up your code.
 
  ---John W. Holmes...
 
  PHP Architect - A monthly magazine for PHP Professionals. Get your
 copy
  today. http://www.phparch.com/
 
 
 
  --
  PHP General Mailing List (http://www.php.net/)
  To unsubscribe, visit: http://www.php.net/unsub.php
 
 
 
 
 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] preg_match question: locating unmatched HTML tags

2003-02-22 Thread Andy Crain
Good point, and I might end up doing just that if I can't find a
solution. The problem is that I'm considering using for some forms a
textarea wysiwyg replacement (e.g.,
http://www.interactivetools.com/products/htmlarea/ or
http://www.siteworkspro.com) that results in HTML output. And I wanted
to check the output of that to make sure there aren't any extraneous
tags.
Andy

 -Original Message-
 From: John W. Holmes [mailto:[EMAIL PROTECTED]
 Sent: Saturday, February 22, 2003 5:04 PM
 To: 'Andy Crain'; [EMAIL PROTECTED]
 Subject: RE: [PHP] preg_match question: locating unmatched HTML tags
 
 Well, like someone else said, it's hard to look for and match stuff
that
 isn't there. In addition to the security benefit, it's just easier to
 code something that looks for [b](.*)[/b] and replaces those tags with
 b and /b (or strong and /strong if you want to be technically
 correct).
 
 Honestly, if you've got a small group of people like you say then just
 teach them HTML so they don't make mistakes like this. Or provide a
 preview mode so they can double check their work.
 
 ---John W. Holmes...
 
 PHP Architect - A monthly magazine for PHP Professionals. Get your
copy
 today. http://www.phparch.com/
 
  -Original Message-
  From: Andy Crain [mailto:[EMAIL PROTECTED]
  Sent: Saturday, February 22, 2003 4:54 PM
  To: [EMAIL PROTECTED]
  Subject: RE: [PHP] preg_match question: locating unmatched HTML tags
 
  John,
  Thanks. I'm considering that, but the application I'm working on is
 for
  a small intranet that will be for only a small group of supervised
  users, so vulnerability isn't such a large concern.
  Andy
 
   -Original Message-
   From: John W. Holmes [mailto:[EMAIL PROTECTED]
   Sent: Saturday, February 22, 2003 1:06 AM
   To: 'Andy Crain'; [EMAIL PROTECTED]
   Subject: RE: [PHP] preg_match question: locating unmatched HTML
tags
  
I'm trying to build a regexp that would parse user-supplied text
 and
identify cases where HTML tags are left open or are not properly
matched-e.g., b tags without closing /b tags. This is for a
 sort
   of
message board type of application, and I'd like to allow users
to
  use
some HTML, but just would like to check to ensure that no stray
 tags
   are
input that would screw up the rest of the page's display. I'm
new
 to
regular expressions, and the one below is as far as I've gotten.
 If
anyone has any suggestions, they'd be very much appreciated.
  
   Letting users enter HTML is a bad idea. Even if you only let them
 use
   b tags, they can still put ONCLICK and mouseover effects for the
  bold
   text to screw with your other users.
  
   Use a BB style code, such as [b] for bold, [i] for italics, etc.
 This
   way, you only match pairs and replace them with HTML and use
   htmlentities on anything else. This way an unmatched [b] tag won't
 be
   replaced with b and mess up your code.
  
   ---John W. Holmes...
  
   PHP Architect - A monthly magazine for PHP Professionals. Get your
  copy
   today. http://www.phparch.com/
  
  
  
   --
   PHP General Mailing List (http://www.php.net/)
   To unsubscribe, visit: http://www.php.net/unsub.php
 
 
 
 
  --
  PHP General Mailing List (http://www.php.net/)
  To unsubscribe, visit: http://www.php.net/unsub.php
 
 




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question: locating unmatched HTML tags

2003-02-22 Thread Tom Rogers
Hi,

Saturday, February 22, 2003, 12:35:15 PM, you wrote:
AC My apologies in advance if this too basic or there's a solution easily
AC found out there, but after lots of searching, I'm still lost.

 

AC I'm trying to build a regexp that would parse user-supplied text and
AC identify cases where HTML tags are left open or are not properly
AC matched-e.g., b tags without closing /b tags. This is for a sort of
AC message board type of application, and I'd like to allow users to use
AC some HTML, but just would like to check to ensure that no stray tags are
AC input that would screw up the rest of the page's display. I'm new to
AC regular expressions, and the one below is as far as I've gotten. If
AC anyone has any suggestions, they'd be very much appreciated.

AC Thanks,

AC Andy

 

 

AC $suspect_tags = b|i|u|strong|em|font|a|ol|ul|blockquote ;

AC $pattern = '/(' . $suspect_tags . '[^]*)(.*)(?!\/\1)/Ui';

AC if (preg_match($pattern,$_POST['entry'],$matches)) {

AC//do something to report the unclosed tags

AC } else {

ACecho 'Input looks fine. No unmatched tags.';

AC }

The simplest is just to add /b/i/textarea/whatever else you allow directly to 
the end of their
message, may not be technically correct but it won't do any harm either :)

-- 
regards,
Tom


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] preg_match question: locating unmatched HTML tags

2003-02-22 Thread Tom Rogers
Hi,

Saturday, February 22, 2003, 12:35:15 PM, you wrote:
AC My apologies in advance if this too basic or there's a solution easily
AC found out there, but after lots of searching, I'm still lost.

 

AC I'm trying to build a regexp that would parse user-supplied text and
AC identify cases where HTML tags are left open or are not properly
AC matched-e.g., b tags without closing /b tags. This is for a sort of
AC message board type of application, and I'd like to allow users to use
AC some HTML, but just would like to check to ensure that no stray tags are
AC input that would screw up the rest of the page's display. I'm new to
AC regular expressions, and the one below is as far as I've gotten. If
AC anyone has any suggestions, they'd be very much appreciated.

AC Thanks,

AC Andy

 

 

AC $suspect_tags = b|i|u|strong|em|font|a|ol|ul|blockquote ;

AC $pattern = '/(' . $suspect_tags . '[^]*)(.*)(?!\/\1)/Ui';

AC if (preg_match($pattern,$_POST['entry'],$matches)) {

AC//do something to report the unclosed tags

AC } else {

ACecho 'Input looks fine. No unmatched tags.';

AC }

Here is a function that will fixup simple tags like b i ,it will add in the
missing /b tag at the next start/end tag or end of document.

function fix_mismatch($str){
$match = array();
$split = preg_split('!\(.*?)\!s', $str);
$c = count($split);
$r = ($c == 1)? $str : '';
if($c  1){
$fix = '';
preg_match_all('!\(.*?)\!s', $str,$match);
for($x=0,$y=0;$x  $c;$x++){
$out = $split[$x].$fix; //add in text + any fixup end 
tag
$fix = '';
if(isset($match[0][$x])){
$list = explode(' ',$match[1][$x]); //split up 
compound tag like img src=
$t = trim(strtolower($list[0]));//get 
the tag name
switch ($t){
//add tags to check/fix here
case 'b':
case 'div':
case 'i':
case 'textarea':
$st = '/'.$t;   //make an end 
tag to search for
$rest = array_slice($match[1],$x+1); 
// get the remaining tags
$found = false;
while(!$found  list(,$v) = 
each($rest)){
$et = explode(' ',$v);
$found = ($st == 
trim(strtolower($et[0])))? True:False; //have we found it ?
}
if(!$found){
$fix = ''.$st.''; //create 
an html end tag
}
break;
}
$out .= $match[0][$x]; //add in tag
}
$r .= $out; //build return string
}
}
return $r;
}

//usage
$test1 = 'divThis is a B bold word img src=hello.jpg/b and another bbold 
word /divend of btest';
$test2 = 'bbifrog';

echo fix_mismatch($test1);
echo 'br';
echo fix_mismatch($test2);

-- 
regards,
Tom


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] preg_match question: locating unmatched HTML tags

2003-02-21 Thread Andy Crain
My apologies in advance if this too basic or there's a solution easily
found out there, but after lots of searching, I'm still lost.

 

I'm trying to build a regexp that would parse user-supplied text and
identify cases where HTML tags are left open or are not properly
matched-e.g., b tags without closing /b tags. This is for a sort of
message board type of application, and I'd like to allow users to use
some HTML, but just would like to check to ensure that no stray tags are
input that would screw up the rest of the page's display. I'm new to
regular expressions, and the one below is as far as I've gotten. If
anyone has any suggestions, they'd be very much appreciated.

Thanks,

Andy

 

 

$suspect_tags = b|i|u|strong|em|font|a|ol|ul|blockquote ;

$pattern = '/(' . $suspect_tags . '[^]*)(.*)(?!\/\1)/Ui';

if (preg_match($pattern,$_POST['entry'],$matches)) {

   //do something to report the unclosed tags

} else {

   echo 'Input looks fine. No unmatched tags.';

}



RE: [PHP] preg_match question: locating unmatched HTML tags

2003-02-21 Thread John W. Holmes
 I'm trying to build a regexp that would parse user-supplied text and
 identify cases where HTML tags are left open or are not properly
 matched-e.g., b tags without closing /b tags. This is for a sort
of
 message board type of application, and I'd like to allow users to use
 some HTML, but just would like to check to ensure that no stray tags
are
 input that would screw up the rest of the page's display. I'm new to
 regular expressions, and the one below is as far as I've gotten. If
 anyone has any suggestions, they'd be very much appreciated.

Letting users enter HTML is a bad idea. Even if you only let them use
b tags, they can still put ONCLICK and mouseover effects for the bold
text to screw with your other users.

Use a BB style code, such as [b] for bold, [i] for italics, etc. This
way, you only match pairs and replace them with HTML and use
htmlentities on anything else. This way an unmatched [b] tag won't be
replaced with b and mess up your code. 

---John W. Holmes...

PHP Architect - A monthly magazine for PHP Professionals. Get your copy
today. http://www.phparch.com/



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php