Jump to content

Counting spaces as characters and excluding !@#$%^&..... from character count?


HMBeaty

Recommended Posts

Good afternoon everyone :)

 

First off, I'm in the process of creating a modification for another user on vBulletin which lets you set the minimum character count a member is allowed to post. I made that pretty quickly using the default code from vBulletin, however, now he's found that his users are getting around this new restriction he's put in place. Here is the code I'm currently using:

global $vbulletin;
$restricted_groups = explode(',', $vbulletin->options['usml_postminchar_usergroups']);
$restricted_users = explode(',', $vbulletin->options['usml_postminchar_users']);
$this->registry->options['usml_postminchar_count'] = intval($this->registry->options['usml_postminchar_count']);

if ($vbulletin->options['usml_postminchar_onoff'])
{
    if (in_array($vbulletin->userinfo['userid'], $restricted_users) OR is_member_of($vbulletin->userinfo, $restricted_groups))
    {
        if ($this->registry->options['usml_postminchar_count'] <= 0)
        {
            $this->registry->options['usml_postminchar_count'] = 1;
        }
        if (vbstrlen(strip_bbcode($pagetext, $this->registry->options['ignorequotechars'])) < $this->registry->options['usml_postminchar_count'])
        {
            $this->error('tooshort', $this->registry->options['usml_postminchar_count']);
            return false;
        }
    }
}

The new addition to this that he's asking for is to count spaces as characters, and exclude all.....non-letters from the character count (such as !@#$%^&*:;"'{}[]<>,./\|)

 

Could anyone help me figure out how to do this please?

 

Thanks in advance :)

Link to comment
Share on other sites

<?php 

// Minimum amount of characters
$minsize = 15;
// Characters that 'count' - space, a-z, A-Z
$counted = array_merge( array(' '), range('a','z'), range('A','Z') );
// Content to check
$post = 'This is a post that must match the minimum size';

// Split post into individual characters
$post_split = str_split( $post );

// This will hold our current count of characters that 'count'
$count = 0;
// Loop through characters until $count >= $minsize
foreach( $post_split as $char ) {
if( in_array($char, $counted) ) $count++;
if( $count >= $minsize ) break;
}
// Double check that $minsize has been met
if( $count >= $minsize )
echo 'Post was long enough';
else
echo 'Post not long enough';

?>

 

It's not exactly efficient, and it won't work for accented characters, though it could be made to work with them. Keep in mind, the more characters you want to 'allow' the longer the in_array will take to execute.

 

I don't know of any other way to do it, but this seems like an odd requirement. Perhaps if you specified the actual problem we could provide a better way to accomplish it.

Link to comment
Share on other sites

I guess the best way I could explain the request would be to post the PM conversation between us. So here we are :) ....

 

Do you have AIM' date=' Yahoo or MSN messenger?[/quote']

Hi Brooks,

 

Sorry for my late reply.

I went to bed and couldn't get your last message.

 

 

If you have gmail I can use valdet.shehu@gmail.com for chat. I don't use Yahoo or MSN anymore. If need be I will create a new account and be ready.

 

I am at work so chatting isn't allowed on firewall but I can be available for chat after 2 PM EST. Does that work for you?

 

I appreciate your time and I look forward to your reply.

 

Best regards,

Val.

No, I won't be available at that time as I don't get off work until 8pm EST. I went ahead and whipped something up though if you want to go ahead and test it. It was developed on my vB 4 test site, but should still work for vB 3 since a few of my other modifications use a similar code to function.

 

You can download it here:

http://www.usmilitarylife.com/minchar.zip

 

Let me know how it works for you :)

Brooks, this works very well. I just installed it, tested it with one of my dummy accounts and it works just as I expected. Excellent work.

 

One thing which I would ask, is if you can incorporate a solution so users are prevented from bypassing the character limit, when they just type blank spaces etc... In other words blank spaces not to be counted.

 

There is a solution for that here, but it is archived and I cannot access it. Maybe you as a moderator can access the files here

 

http://www.vbulletin.org/forum/showthread.php?t=67263

 

My users are quite savvy and would probably find a way to bypass the limits with blank spaces.

 

 

Nevertheless, it's wonderful work and I really appreciate your time.

Thank you very much.

 

My best regards,

Val from Kosovo.

 

Incidentally, as you have a website about military life, families etc... are/were you also a US servicemember? I served as an interpreter for US Army for 4 years and I have many many great memories.

Correction, I am not a moderator :) I'm an advisor, therefore, I don't have permission to access that particular modification. I am also (at the moment) not quite sure on how to count blank spaces as characters, but I'm sure I can figure something out :)

Hi Brooks,

 

Many thanks for your answer. Sorry for mixing your position. Please take as much time as you need. I am in no big rush.

 

I have applied the hack and it's already showing its effects, however, I noticed that one particular user started to bypass this by typing a bunch of punctuation marks and hiding them by wrapping them in white color.

 

Is theer a way to also exclude ,.;:'"/?!@ and other non-letter/number symbols from character count?

A simple regex expression inside your hack could maybe help. I know this one ^[a-zA-Z0-9@\._ ]+$ helps me to get rid of unwanted characters in user registration form, btu that all I know, and anything past that is unknown to me.

 

 

Best regards,

Val.

Also, upon reading this again, I botched the request a little. It seems he does NOT want to count the spaces as characters. Sorry for the confusion :)

Link to comment
Share on other sites

That's easy enough to fix in my posted example. If you can't do it yourself, you need to buy a book or take a class or something.

 

You didn't explain exactly what he was trying to prevent though. How are 15 spaces any different than 15 'a' characters used in trying to bypass this minimum limit? How are 15 punctuation marks different than 15 letters hidden in the same color as the background? Unless you're ready to check for MANY, MANY situations, there will always be ways to make nonsense, wasted posts. User intervention and moderation is how this is fixed. Delete the offending posts, or ban the user making them. Force CAPTCHA on users will less than x number of posts to discourage spammers or people from simply making new accounts to annoy.

 

Let me know if any of this helps.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.