Skip to content

Commit

Permalink
Adds containsNonAlphaNumeric validation rule
Browse files Browse the repository at this point in the history
Fixes regex, increases coverage

Test non-supported array keys

Removes array support (no BC neccessary)

Simplifies return logic
  • Loading branch information
bravo-kernel committed Sep 28, 2015
1 parent 5eafb81 commit 54f202e
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
19 changes: 19 additions & 0 deletions src/Validation/Validation.php
Expand Up @@ -307,6 +307,25 @@ public static function compareWith($check, $field, $context)
return $context['data'][$field] === $check;
}

/**
* Checks if a string contains one or more non-alphanumeric characters.
*
* Returns true if string contains at least the specified number of non-alphanumeric characters
*
* @param string $check Value to check
* @param int $count Number of non-alphanumerics to check for
* @return bool Success
*/
public static function containsNonAlphaNumeric($check, $count = 1)
{
if (!is_string($check)) {
return false;
}

$matches = preg_match_all('/[^a-zA-Z0-9]/', $check);
return $matches >= $count;
}

/**
* Used when a custom regular expression is needed.
*
Expand Down
54 changes: 54 additions & 0 deletions tests/TestCase/Validation/ValidationTest.php
Expand Up @@ -2528,6 +2528,60 @@ public function testCompareWith()
$this->assertFalse(Validation::compareWith('a value', 'other', $context));
}

/**
* testContainsNonAlphaNumeric method
*
* @return void
*/
public function testContainNonAlphaNumeric()
{
$this->assertFalse(Validation::containsNonAlphaNumeric('abcdefghijklmnopqrstuvwxyz'));
$this->assertFalse(Validation::containsNonAlphaNumeric('ABCDEFGHIJKLMNOPQRSTUVWXYZ'));
$this->assertFalse(Validation::containsNonAlphaNumeric('0123456789'));
$this->assertFalse(Validation::containsNonAlphaNumeric('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'));

$this->assertTrue(Validation::containsNonAlphaNumeric('#'));
$this->assertTrue(Validation::containsNonAlphaNumeric("0\n"));
$this->assertTrue(Validation::containsNonAlphaNumeric("\n"));
$this->assertTrue(Validation::containsNonAlphaNumeric("\t"));
$this->assertTrue(Validation::containsNonAlphaNumeric("\r"));
$this->assertTrue(Validation::containsNonAlphaNumeric(" "));

$this->assertTrue(Validation::containsNonAlphaNumeric('#abcdef'));
$this->assertTrue(Validation::containsNonAlphaNumeric('abc#def'));
$this->assertTrue(Validation::containsNonAlphaNumeric('abcdef#'));
$this->assertTrue(Validation::containsNonAlphaNumeric('abc def'));
$this->assertTrue(Validation::containsNonAlphaNumeric("abcdef\n"));

$this->assertTrue(Validation::containsNonAlphaNumeric('##abcdef', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('abcdef##', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('#abcdef#', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('#abc#def', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('abc#def#', 2));

$this->assertTrue(Validation::containsNonAlphaNumeric('#♥abcdef', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('abcdef#♥', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('#abcdef♥', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('#abc♥def', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('abc#def♥', 2));

$this->assertTrue(Validation::containsNonAlphaNumeric('#♥abcdef', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('abcdef#♥', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('#abcdef♥', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('#abc♥def', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('abc#def♥', 2));

$this->assertTrue(Validation::containsNonAlphaNumeric('###abcdef', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('abc###def', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('abcdef###', 2));
$this->assertTrue(Validation::containsNonAlphaNumeric('#abc#def#', 2));

$this->assertFalse(Validation::containsNonAlphaNumeric('##abcdef', 3));
$this->assertFalse(Validation::containsNonAlphaNumeric('abcdef##', 3));
$this->assertFalse(Validation::containsNonAlphaNumeric('abc##def', 3));
$this->assertFalse(Validation::containsNonAlphaNumeric('ab#cd#ef', 3));
}

/**
* Test the geoCoordinate method.
*
Expand Down

0 comments on commit 54f202e

Please sign in to comment.