Sherif Buzz
Sherif Buzz

Reputation: 1226

PHP / regular expression to check if a string contains a word of a certain length

I need to check whether a received string contains any words that are more than 20 characters in length. For example the input string :

hi there asssssssssssssssssssskkkkkkkk how are you doing ?

would return true.

could somebody please help me out with a regexp to check for this. i'm using php.

thanks in advance.

Upvotes: 2

Views: 2533

Answers (3)

vito huang
vito huang

Reputation: 4448

I think the strlen function is what you looking for. you can do something like this:

if (strlen($input) > 20) {
    echo "input is more than 20 characters";
}

Upvotes: -2

polygenelubricants
polygenelubricants

Reputation: 383746

You can test if the string contains a match of the following pattern:

[A-Za-z]{20}

The construct [A-Za-z] creates a character class that matches ASCII uppercase and lowercase letters. The {20} is a finite repetition syntax. It's enough to check if there's a match that contains 20 letters, because if there's a word that contains more, it contains at least 20.

References


PHP snippet

Here's an example usage:

$strings = array(
  "hey what the (@#$&*!@^#*&^@!#*^@#*@#*&^@!*#!",
  "now this one is just waaaaaaaaaaaaaaaaaaay too long",
  "12345678901234567890123 that's not a word, is it???",
  "LOLOLOLOLOLOLOLOLOLOLOL that's just unacceptable!",
  "one-two-three-four-five-six-seven-eight-nine-ten",
  "goaaaa...............aaaaaaaaaalll!!!!!!!!!!!!!!",
  "there is absolutely nothing here"
);

foreach ($strings as $str) {
  echo $str."\n".preg_match('/[a-zA-Z]{20}/', $str)."\n";
}

This prints (as seen on ideone.com):

hey what the (@#$&*!@^#*&^@!#*^@#*@#*&^@!*#!
0
now this one is just waaaaaaaaaaaaaaaaaaay too long
1
12345678901234567890123 that's not a word, is it???
0
LOLOLOLOLOLOLOLOLOLOLOL that's just unacceptable!
1
one-two-three-four-five-six-seven-eight-nine-ten
0
goaaaa...............aaaaaaaaaalll!!!!!!!!!!!!!!
0
there is absolutely nothing here
0

As specified in the pattern, preg_match is true when there's a "word" (as defined by a sequence of letters) that is at least 20 characters long.

If this definition of a "word" is not adequate, then simply change the pattern to, e.g. \S{20}. That is, any seqeuence of 20 non-whitespace characters; now all but the last string is a match (as seen on ideone.com).

Upvotes: 4

Wrikken
Wrikken

Reputation: 70470

/\w{20}/

...filller for 15 characters....

Upvotes: 5

Related Questions