|  | Posted by frizzle on 07/16/06 14:04 
frizzle wrote:> Chung Leong wrote:
 > > frizzle wrote:
 > > > Hi group,
 > > >
 > > > I have a function which validates a string using preg match.
 > > > A part looks like
 > > >
 > > > if( !preg_match( '/^([a-z0-9]+(([a-z0-9_-]*)?[a-z0-9])?)$/', $string )
 > > > ||
 > > > preg_match( '/(--|__)+/' ,$string) ) {
 > > >
 > > > i wonder how i could combine those two into one ...
 > > > I tried a few different options of putting the second match into the
 > > > first one,
 > > > using things like [^__]+ etc, but nothing worked for me.
 > > > it should prevent double (or more) dashes or underscores behind each
 > > > other.
 > > > hello-there   = ok
 > > > hello--there != ok
 > > >
 > > > Any help would be great.
 > > >
 > > > Frizzle.
 > >
 > > What you need is a lookahead and lookbehind assertion on the dash and
 > > underscore, stating that they're acceptable only if there're letters in
 > > front and behind them:
 > >
 > >      /^(?:[a-z]|(?<=[a-z])[-_](?=[a-z]))+$/
 >
 > /^(?:[a-z]|(?<=[a-z])[-_](?=[a-z]))+$/
 >
 > wowowow, could you explain a little on this ?
 > like the : and ?<= parts
 >
 > (i assume 0-9 should still be included??)
 >
 > Frizzle.
 
 Still curious after the explanation, but just letting you know it works
 axactly as it should ..
 
 Frizzle.
  Navigation: [Reply to this message] |