user4651556
user4651556

Reputation: 11

PHP: RegEx Syntax

I am a serious newbie with regular expression so please disregard my mistakes. I need to be sure that several criteria in a string are met.

Requirements:

  • Have at most 5 words
  • Max of 256 characters
  • Word is considered 1 or more characters - no spaces
  • Shouldn't contain two consecutive spaces

Example:

  • Tree blows in the wind
  • 1-Tree falls over

Failure Example:

  • Tree blows in the night sky
  • Tree breaks 2 limbs during night

Can this be done in one single expression or should it be broken up?

Validating for 2 spaces:

- /^\s\s$/

Max of 256 characters:

- /^[a-zA-Z0-9]{,256}$/

I am not sure how to test case for the 5 words and combine the other criteria that I impose. Can anyone help?

Test for word:

- /^\w{1,5}$

Upvotes: 0

Views: 38

Answers (1)

Casimir et Hippolyte
Casimir et Hippolyte

Reputation: 89584

You can try this:

(?s)\A(?!.{257}|.*\s\s)\W*\w*(?:\W+\w+){0,4}\W*\z

pattern details:

(?s)          # turn on the singleline mode: allow the dot to match newlines
\A            # start of the string anchor
(?!           # open a negative lookahead assertion: means not followed by
    .{257}    # 257 characters
  |           # OR
    .*\s\s    # two consecutive whitespaces
)             # close the negative lookahead
\W*           # optional non-word characters
\w*           # optional word characters (nothing in your requirements forbids to have a string without words or an empty string)
(?:           # open a non-capturing group
    \W+       # non-word characters: words are obviously separated with non-word characters
    \w+       # an other word 
){0,4}        # repeat the non-capturing group between zero and 4 times
\W*           # optional non-word characters
\z            # anchor for the end of the string

Upvotes: 2

Related Questions