|
Perforce Chronicle 2012.2/486814
API Documentation
|
Validates string for suitability as a Perforce key name. More...
Public Member Functions | |
| allowCommas ($allowed) | |
| Control if comma character ',' is permitted. | |
| allowPercent ($allowed) | |
| Control if percent character '' is permitted. | |
| allowPositional ($allowed) | |
| Control if positional specifiers are permitted (values containing '%%", as in '%1'). | |
| allowPurelyNumeric ($allowed) | |
| Control if purely numeric key names are permitted (values consisting of only characters 0-9). | |
| allowSlashes ($allowed) | |
| Control if forward slashes '/' are permitted. | |
| isValid ($value) | |
| Checks if the given string is a valid perforce spec name. | |
Public Attributes | |
| const | COMMAS = 'commas' |
| const | HAS_WHITESPACE = 'hasSpaces' |
| const | INVALID_TYPE = 'invalidType' |
| const | IS_EMPTY = 'isEmpty' |
| const | IS_NUMERIC = 'isNumeric' |
| const | LEADING_MINUS = 'leadingMinus' |
| const | PERCENT = 'percent' |
| const | POSITIONAL_SPECIFIERS = 'positional' |
| const | RELATIVE = 'relative' |
| const | REVISION_CHARACTERS = 'revision' |
| const | SLASHES = 'slashes' |
| const | UNPRINTABLE_CHARACTERS = 'unprintable' |
| const | WILDCARDS = 'wildcards' |
Protected Attributes | |
| $_allowCommas = true | |
| $_allowPercent = true | |
| $_allowPositional = true | |
| $_allowPurelyNumeric = false | |
| $_allowRelative = true | |
| $_allowSlashes = false | |
| $_messageTemplates | |
Validates string for suitability as a Perforce key name.
By default disallows:
By default allows, but can block:
| P4_Validate_KeyName::allowCommas | ( | $ | allowed | ) |
Control if comma character ',' is permitted.
| bool | $allowed | pass true (default) to allow commas ',', false to disallow. |
{
$this->_allowCommas = (bool) $allowed;
}
| P4_Validate_KeyName::allowPercent | ( | $ | allowed | ) |
Control if percent character '' is permitted.
| bool | $allowed | pass true (default) to allow percent '', false to disallow. |
{
$this->_allowPercent = (bool) $allowed;
}
| P4_Validate_KeyName::allowPositional | ( | $ | allowed | ) |
Control if positional specifiers are permitted (values containing '%%", as in '%1').
| bool | $allowed | pass true to allow positional specifiers, false to disallow. |
{
$this->_allowPositional = (bool) $allowed;
}
| P4_Validate_KeyName::allowPurelyNumeric | ( | $ | allowed | ) |
Control if purely numeric key names are permitted (values consisting of only characters 0-9).
| bool | $allowed | pass true to allow purely numeric names, false to disallow. |
{
$this->_allowPurelyNumeric = (bool) $allowed;
}
| P4_Validate_KeyName::allowSlashes | ( | $ | allowed | ) |
Control if forward slashes '/' are permitted.
| bool | $allowed | pass true to allow forward slashes, false (default) to disallow. |
{
$this->_allowSlashes = (bool) $allowed;
}
| P4_Validate_KeyName::isValid | ( | $ | value | ) |
Checks if the given string is a valid perforce spec name.
| string | int | $value | spec name value to validate. |
Reimplemented in P4_Validate_StreamName, P4Cms_Validate_ContentTypeElementName, and P4Cms_Validate_RecordField.
{
$this->_setValue($value);
// permit ints if allowPurelyNumeric is true.
if ($this->_allowPurelyNumeric && is_int($value)) {
$value = (string) $value;
}
// test for valid type.
if (!is_string($value)) {
$this->_error(static::INVALID_TYPE);
return false;
}
// test for unprintable characters.
if (preg_match('/[\x00-\x1F\x80-\xFF]/', $value)) {
$this->_error(static::UNPRINTABLE_CHARACTERS);
return false;
}
// test for purely numeric name.
if (!$this->_allowPurelyNumeric && preg_match('/^[0-9]+$/', $value)) {
$this->_error(static::IS_NUMERIC);
return false;
}
// test for empty value.
if ($value === '') {
$this->_error(static::IS_EMPTY);
return false;
}
// test for whitespace.
if (preg_match('/\s/', $value)) {
$this->_error(static::HAS_WHITESPACE);
return false;
}
// test for revision characters.
if (preg_match('/@|#/', $value)) {
$this->_error(static::REVISION_CHARACTERS);
return false;
}
// test for wildcard characters.
if (preg_match('/\*|\.\.\./', $value)) {
$this->_error(static::WILDCARDS);
return false;
}
// test for positional specifiers.
if (!$this->_allowPositional && strpos($value, '%%') !== false) {
$this->_error(static::POSITIONAL_SPECIFIERS);
return false;
}
// test for percent character
if (!$this->_allowPercent && strpos($value, '%') !== false) {
$this->_error(static::PERCENT);
return false;
}
// test for comma character
if (!$this->_allowCommas && strpos($value, ',') !== false) {
$this->_error(static::COMMAS);
return false;
}
// test for leading minus ('-') character.
if ($value[0] === "-") {
$this->_error(static::LEADING_MINUS);
return false;
}
// test for forward slash character.
if (!$this->_allowSlashes && strpos($value, '/') !== false) {
$this->_error(static::SLASHES);
return false;
}
// If relative paths aren't allowed the following are blocked:
// two or more slashes after the first character
// containing '/./'
// containing '/../'
// ending in a slash
// ending in '/.'
// ending in '/..'
if (!$this->_allowRelative && preg_match('#.+//|/\./|/\.\./|.+/$|/\.$|/\.\.$#', $value)) {
$this->_error(static::RELATIVE);
return false;
}
return true;
}
P4_Validate_KeyName::$_allowCommas = true [protected] |
Reimplemented in P4_Validate_StreamName.
P4_Validate_KeyName::$_allowPercent = true [protected] |
Reimplemented in P4_Validate_StreamName.
P4_Validate_KeyName::$_allowPositional = true [protected] |
Reimplemented in P4_Validate_SpecName, and P4_Validate_StreamName.
P4_Validate_KeyName::$_allowPurelyNumeric = false [protected] |
P4_Validate_KeyName::$_allowRelative = true [protected] |
Reimplemented in P4_Validate_StreamName.
P4_Validate_KeyName::$_allowSlashes = false [protected] |
Reimplemented in P4_Validate_StreamName.
P4_Validate_KeyName::$_messageTemplates [protected] |
array(
self::INVALID_TYPE => "Invalid type given.",
self::IS_EMPTY => "Is an empty string.",
self::IS_NUMERIC => "Purely numeric values are not allowed.",
self::HAS_WHITESPACE => "Whitespace is not permitted.",
self::REVISION_CHARACTERS => "Revision characters ('#', '@') are not permitted.",
self::WILDCARDS => "Wildcards ('*', '...') are not permitted.",
self::LEADING_MINUS => "First character cannot be minus ('-').",
self::UNPRINTABLE_CHARACTERS => "Unprintable characters are not permitted.",
self::SLASHES => "Slashes ('/') are not permitted.",
self::COMMAS => "Commas (',') are not permitted.",
self::PERCENT => "Percent ('%') is not permitted.",
self::POSITIONAL_SPECIFIERS => "Positional specifiers ('%%x') are not permitted.",
self::RELATIVE => "Relative paths are not permitted."
)
Reimplemented from P4_Validate_Abstract.
| const P4_Validate_KeyName::COMMAS = 'commas' |
| const P4_Validate_KeyName::HAS_WHITESPACE = 'hasSpaces' |
| const P4_Validate_KeyName::INVALID_TYPE = 'invalidType' |
| const P4_Validate_KeyName::IS_EMPTY = 'isEmpty' |
| const P4_Validate_KeyName::IS_NUMERIC = 'isNumeric' |
| const P4_Validate_KeyName::LEADING_MINUS = 'leadingMinus' |
| const P4_Validate_KeyName::PERCENT = 'percent' |
| const P4_Validate_KeyName::POSITIONAL_SPECIFIERS = 'positional' |
| const P4_Validate_KeyName::RELATIVE = 'relative' |
| const P4_Validate_KeyName::REVISION_CHARACTERS = 'revision' |
| const P4_Validate_KeyName::SLASHES = 'slashes' |
| const P4_Validate_KeyName::UNPRINTABLE_CHARACTERS = 'unprintable' |
| const P4_Validate_KeyName::WILDCARDS = 'wildcards' |