Browse files

added max param fix #3

  • Loading branch information...
1 parent 2bc0bce commit ce272d5c52d77523f5039c8448159178900c1958 @SebSept committed Nov 22, 2012
Showing with 574 additions and 32 deletions.
  1. +375 −0 LICENCE.md
  2. +44 −11 README.md
  3. +39 −3 doc/api/SPasswordValidator.html
  4. +9 −1 doc/api/manual.hhk
  5. +107 −17 protected/extensions/SPasswordValidator/SPasswordValidator.php
View
375 LICENCE.md
@@ -0,0 +1,375 @@
+![image](http://creativecommons.org/images/deed/cc-logo.jpg)
+
+Creative Commons Legal Code
+===========================
+
+Attribution-ShareAlike 3.0 Unported
+-----------------------------------
+
+
+> CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+> LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
+> ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+> INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+> REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
+> DAMAGES RESULTING FROM ITS USE.
+
+### *License*
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
+COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
+COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
+AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
+TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
+BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
+CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
+CONDITIONS.
+
+**1. Definitions**
+
+1. **"Adaptation"** means a work based upon the Work, or upon the Work
+ and other pre-existing works, such as a translation, adaptation,
+ derivative work, arrangement of music or other alterations of a
+ literary or artistic work, or phonogram or performance and includes
+ cinematographic adaptations or any other form in which the Work may
+ be recast, transformed, or adapted including in any form
+ recognizably derived from the original, except that a work that
+ constitutes a Collection will not be considered an Adaptation for
+ the purpose of this License. For the avoidance of doubt, where the
+ Work is a musical work, performance or phonogram, the
+ synchronization of the Work in timed-relation with a moving image
+ ("synching") will be considered an Adaptation for the purpose of
+ this License.
+2. **"Collection"** means a collection of literary or artistic works,
+ such as encyclopedias and anthologies, or performances, phonograms
+ or broadcasts, or other works or subject matter other than works
+ listed in Section 1(f) below, which, by reason of the selection and
+ arrangement of their contents, constitute intellectual creations, in
+ which the Work is included in its entirety in unmodified form along
+ with one or more other contributions, each constituting separate and
+ independent works in themselves, which together are assembled into a
+ collective whole. A work that constitutes a Collection will not be
+ considered an Adaptation (as defined below) for the purposes of this
+ License.
+3. **"Creative Commons Compatible License"** means a license that is
+ listed at http://creativecommons.org/compatiblelicenses that has
+ been approved by Creative Commons as being essentially equivalent to
+ this License, including, at a minimum, because that license: (i)
+ contains terms that have the same purpose, meaning and effect as the
+ License Elements of this License; and, (ii) explicitly permits the
+ relicensing of adaptations of works made available under that
+ license under this License or a Creative Commons jurisdiction
+ license with the same License Elements as this License.
+4. **"Distribute"** means to make available to the public the original
+ and copies of the Work or Adaptation, as appropriate, through sale
+ or other transfer of ownership.
+5. **"License Elements"** means the following high-level license
+ attributes as selected by Licensor and indicated in the title of
+ this License: Attribution, ShareAlike.
+6. **"Licensor"** means the individual, individuals, entity or entities
+ that offer(s) the Work under the terms of this License.
+7. **"Original Author"** means, in the case of a literary or artistic
+ work, the individual, individuals, entity or entities who created
+ the Work or if no individual or entity can be identified, the
+ publisher; and in addition (i) in the case of a performance the
+ actors, singers, musicians, dancers, and other persons who act,
+ sing, deliver, declaim, play in, interpret or otherwise perform
+ literary or artistic works or expressions of folklore; (ii) in the
+ case of a phonogram the producer being the person or legal entity
+ who first fixes the sounds of a performance or other sounds; and,
+ (iii) in the case of broadcasts, the organization that transmits the
+ broadcast.
+8. **"Work"** means the literary and/or artistic work offered under the
+ terms of this License including without limitation any production in
+ the literary, scientific and artistic domain, whatever may be the
+ mode or form of its expression including digital form, such as a
+ book, pamphlet and other writing; a lecture, address, sermon or
+ other work of the same nature; a dramatic or dramatico-musical work;
+ a choreographic work or entertainment in dumb show; a musical
+ composition with or without words; a cinematographic work to which
+ are assimilated works expressed by a process analogous to
+ cinematography; a work of drawing, painting, architecture,
+ sculpture, engraving or lithography; a photographic work to which
+ are assimilated works expressed by a process analogous to
+ photography; a work of applied art; an illustration, map, plan,
+ sketch or three-dimensional work relative to geography, topography,
+ architecture or science; a performance; a broadcast; a phonogram; a
+ compilation of data to the extent it is protected as a copyrightable
+ work; or a work performed by a variety or circus performer to the
+ extent it is not otherwise considered a literary or artistic work.
+9. **"You"** means an individual or entity exercising rights under this
+ License who has not previously violated the terms of this License
+ with respect to the Work, or who has received express permission
+ from the Licensor to exercise rights under this License despite a
+ previous violation.
+10. **"Publicly Perform"** means to perform public recitations of the
+ Work and to communicate to the public those public recitations, by
+ any means or process, including by wire or wireless means or public
+ digital performances; to make available to the public Works in such
+ a way that members of the public may access these Works from a place
+ and at a place individually chosen by them; to perform the Work to
+ the public by any means or process and the communication to the
+ public of the performances of the Work, including by public digital
+ performance; to broadcast and rebroadcast the Work by any means
+ including signs, sounds or images.
+11. **"Reproduce"** means to make copies of the Work by any means
+ including without limitation by sound or visual recordings and the
+ right of fixation and reproducing fixations of the Work, including
+ storage of a protected performance or phonogram in digital form or
+ other electronic medium.
+
+**2. Fair Dealing Rights.** Nothing in this License is intended to
+reduce, limit, or restrict any uses free from copyright or rights
+arising from limitations or exceptions that are provided for in
+connection with the copyright protection under copyright law or other
+applicable laws.
+
+**3. License Grant.** Subject to the terms and conditions of this
+License, Licensor hereby grants You a worldwide, royalty-free,
+non-exclusive, perpetual (for the duration of the applicable copyright)
+license to exercise the rights in the Work as stated below:
+
+1. to Reproduce the Work, to incorporate the Work into one or more
+ Collections, and to Reproduce the Work as incorporated in the
+ Collections;
+2. to create and Reproduce Adaptations provided that any such
+ Adaptation, including any translation in any medium, takes
+ reasonable steps to clearly label, demarcate or otherwise identify
+ that changes were made to the original Work. For example, a
+ translation could be marked "The original work was translated from
+ English to Spanish," or a modification could indicate "The original
+ work has been modified.";
+3. to Distribute and Publicly Perform the Work including as
+ incorporated in Collections; and,
+4. to Distribute and Publicly Perform Adaptations.
+5. For the avoidance of doubt:
+
+ 1. **Non-waivable Compulsory License Schemes**. In those
+ jurisdictions in which the right to collect royalties through
+ any statutory or compulsory licensing scheme cannot be waived,
+ the Licensor reserves the exclusive right to collect such
+ royalties for any exercise by You of the rights granted under
+ this License;
+ 2. **Waivable Compulsory License Schemes**. In those jurisdictions
+ in which the right to collect royalties through any statutory or
+ compulsory licensing scheme can be waived, the Licensor waives
+ the exclusive right to collect such royalties for any exercise
+ by You of the rights granted under this License; and,
+ 3. **Voluntary License Schemes**. The Licensor waives the right to
+ collect royalties, whether individually or, in the event that
+ the Licensor is a member of a collecting society that
+ administers voluntary licensing schemes, via that society, from
+ any exercise by You of the rights granted under this License.
+
+The above rights may be exercised in all media and formats whether now
+known or hereafter devised. The above rights include the right to make
+such modifications as are technically necessary to exercise the rights
+in other media and formats. Subject to Section 8(f), all rights not
+expressly granted by Licensor are hereby reserved.
+
+**4. Restrictions.** The license granted in Section 3 above is expressly
+made subject to and limited by the following restrictions:
+
+1. You may Distribute or Publicly Perform the Work only under the terms
+ of this License. You must include a copy of, or the Uniform Resource
+ Identifier (URI) for, this License with every copy of the Work You
+ Distribute or Publicly Perform. You may not offer or impose any
+ terms on the Work that restrict the terms of this License or the
+ ability of the recipient of the Work to exercise the rights granted
+ to that recipient under the terms of the License. You may not
+ sublicense the Work. You must keep intact all notices that refer to
+ this License and to the disclaimer of warranties with every copy of
+ the Work You Distribute or Publicly Perform. When You Distribute or
+ Publicly Perform the Work, You may not impose any effective
+ technological measures on the Work that restrict the ability of a
+ recipient of the Work from You to exercise the rights granted to
+ that recipient under the terms of the License. This Section 4(a)
+ applies to the Work as incorporated in a Collection, but this does
+ not require the Collection apart from the Work itself to be made
+ subject to the terms of this License. If You create a Collection,
+ upon notice from any Licensor You must, to the extent practicable,
+ remove from the Collection any credit as required by Section 4(c),
+ as requested. If You create an Adaptation, upon notice from any
+ Licensor You must, to the extent practicable, remove from the
+ Adaptation any credit as required by Section 4(c), as requested.
+2. You may Distribute or Publicly Perform an Adaptation only under the
+ terms of: (i) this License; (ii) a later version of this License
+ with the same License Elements as this License; (iii) a Creative
+ Commons jurisdiction license (either this or a later license
+ version) that contains the same License Elements as this License
+ (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons
+ Compatible License. If you license the Adaptation under one of the
+ licenses mentioned in (iv), you must comply with the terms of that
+ license. If you license the Adaptation under the terms of any of the
+ licenses mentioned in (i), (ii) or (iii) (the "Applicable License"),
+ you must comply with the terms of the Applicable License generally
+ and the following provisions: (I) You must include a copy of, or the
+ URI for, the Applicable License with every copy of each Adaptation
+ You Distribute or Publicly Perform; (II) You may not offer or impose
+ any terms on the Adaptation that restrict the terms of the
+ Applicable License or the ability of the recipient of the Adaptation
+ to exercise the rights granted to that recipient under the terms of
+ the Applicable License; (III) You must keep intact all notices that
+ refer to the Applicable License and to the disclaimer of warranties
+ with every copy of the Work as included in the Adaptation You
+ Distribute or Publicly Perform; (IV) when You Distribute or Publicly
+ Perform the Adaptation, You may not impose any effective
+ technological measures on the Adaptation that restrict the ability
+ of a recipient of the Adaptation from You to exercise the rights
+ granted to that recipient under the terms of the Applicable License.
+ This Section 4(b) applies to the Adaptation as incorporated in a
+ Collection, but this does not require the Collection apart from the
+ Adaptation itself to be made subject to the terms of the Applicable
+ License.
+3. If You Distribute, or Publicly Perform the Work or any Adaptations
+ or Collections, You must, unless a request has been made pursuant to
+ Section 4(a), keep intact all copyright notices for the Work and
+ provide, reasonable to the medium or means You are utilizing: (i)
+ the name of the Original Author (or pseudonym, if applicable) if
+ supplied, and/or if the Original Author and/or Licensor designate
+ another party or parties (e.g., a sponsor institute, publishing
+ entity, journal) for attribution ("Attribution Parties") in
+ Licensor's copyright notice, terms of service or by other reasonable
+ means, the name of such party or parties; (ii) the title of the Work
+ if supplied; (iii) to the extent reasonably practicable, the URI, if
+ any, that Licensor specifies to be associated with the Work, unless
+ such URI does not refer to the copyright notice or licensing
+ information for the Work; and (iv) , consistent with Ssection 3(b),
+ in the case of an Adaptation, a credit identifying the use of the
+ Work in the Adaptation (e.g., "French translation of the Work by
+ Original Author," or "Screenplay based on original Work by Original
+ Author"). The credit required by this Section 4(c) may be
+ implemented in any reasonable manner; provided, however, that in the
+ case of a Adaptation or Collection, at a minimum such credit will
+ appear, if a credit for all contributing authors of the Adaptation
+ or Collection appears, then as part of these credits and in a manner
+ at least as prominent as the credits for the other contributing
+ authors. For the avoidance of doubt, You may only use the credit
+ required by this Section for the purpose of attribution in the
+ manner set out above and, by exercising Your rights under this
+ License, You may not implicitly or explicitly assert or imply any
+ connection with, sponsorship or endorsement by the Original Author,
+ Licensor and/or Attribution Parties, as appropriate, of You or Your
+ use of the Work, without the separate, express prior written
+ permission of the Original Author, Licensor and/or Attribution
+ Parties.
+4. Except as otherwise agreed in writing by the Licensor or as may be
+ otherwise permitted by applicable law, if You Reproduce, Distribute
+ or Publicly Perform the Work either by itself or as part of any
+ Adaptations or Collections, You must not distort, mutilate, modify
+ or take other derogatory action in relation to the Work which would
+ be prejudicial to the Original Author's honor or reputation.
+ Licensor agrees that in those jurisdictions (e.g. Japan), in which
+ any exercise of the right granted in Section 3(b) of this License
+ (the right to make Adaptations) would be deemed to be a distortion,
+ mutilation, modification or other derogatory action prejudicial to
+ the Original Author's honor and reputation, the Licensor will waive
+ or not assert, as appropriate, this Section, to the fullest extent
+ permitted by the applicable national law, to enable You to
+ reasonably exercise Your right under Section 3(b) of this License
+ (right to make Adaptations) but not otherwise.
+
+**5. Representations, Warranties and Disclaimer**
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
+OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
+KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
+LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
+WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE
+EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+**6. Limitation on Liability.** EXCEPT TO THE EXTENT REQUIRED BY
+APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL
+THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY
+DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF
+LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+**7. Termination**
+
+1. This License and the rights granted hereunder will terminate
+ automatically upon any breach by You of the terms of this License.
+ Individuals or entities who have received Adaptations or Collections
+ from You under this License, however, will not have their licenses
+ terminated provided such individuals or entities remain in full
+ compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
+ survive any termination of this License.
+2. Subject to the above terms and conditions, the license granted here
+ is perpetual (for the duration of the applicable copyright in the
+ Work). Notwithstanding the above, Licensor reserves the right to
+ release the Work under different license terms or to stop
+ distributing the Work at any time; provided, however that any such
+ election will not serve to withdraw this License (or any other
+ license that has been, or is required to be, granted under the terms
+ of this License), and this License will continue in full force and
+ effect unless terminated as stated above.
+
+**8. Miscellaneous**
+
+1. Each time You Distribute or Publicly Perform the Work or a
+ Collection, the Licensor offers to the recipient a license to the
+ Work on the same terms and conditions as the license granted to You
+ under this License.
+2. Each time You Distribute or Publicly Perform an Adaptation, Licensor
+ offers to the recipient a license to the original Work on the same
+ terms and conditions as the license granted to You under this
+ License.
+3. If any provision of this License is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability
+ of the remainder of the terms of this License, and without further
+ action by the parties to this agreement, such provision shall be
+ reformed to the minimum extent necessary to make such provision
+ valid and enforceable.
+4. No term or provision of this License shall be deemed waived and no
+ breach consented to unless such waiver or consent shall be in
+ writing and signed by the party to be charged with such waiver or
+ consent.
+5. This License constitutes the entire agreement between the parties
+ with respect to the Work licensed here. There are no understandings,
+ agreements or representations with respect to the Work not specified
+ here. Licensor shall not be bound by any additional provisions that
+ may appear in any communication from You. This License may not be
+ modified without the mutual written agreement of the Licensor and
+ You.
+6. The rights granted under, and the subject matter referenced, in this
+ License were drafted utilizing the terminology of the Berne
+ Convention for the Protection of Literary and Artistic Works (as
+ amended on September 28, 1979), the Rome Convention of 1961, the
+ WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms
+ Treaty of 1996 and the Universal Copyright Convention (as revised on
+ July 24, 1971). These rights and subject matter take effect in the
+ relevant jurisdiction in which the License terms are sought to be
+ enforced according to the corresponding provisions of the
+ implementation of those treaty provisions in the applicable national
+ law. If the standard suite of rights granted under applicable
+ copyright law includes additional rights not granted under this
+ License, such additional rights are deemed to be included in the
+ License; this License is not intended to restrict the license of any
+ rights under applicable law.
+
+> ### Creative Commons Notice
+>
+> Creative Commons is not a party to this License, and makes no warranty
+> whatsoever in connection with the Work. Creative Commons will not be
+> liable to You or any party on any legal theory for any damages
+> whatsoever, including without limitation any general, special,
+> incidental or consequential damages arising in connection to this
+> license. Notwithstanding the foregoing two (2) sentences, if Creative
+> Commons has expressly identified itself as the Licensor hereunder, it
+> shall have all rights and obligations of Licensor.
+>
+> Except for the limited purpose of indicating to the public that the
+> Work is licensed under the CCPL, Creative Commons does not authorize
+> the use by either party of the trademark "Creative Commons" or any
+> related trademark or logo of Creative Commons without the prior
+> written consent of Creative Commons. Any permitted use will be in
+> compliance with Creative Commons' then-current trademark usage
+> guidelines, as may be published on its website or otherwise made
+> available upon request from time to time. For the avoidance of doubt,
+> this trademark restriction does not form part of the License.
+>
+> Creative Commons may be contacted at
+> [http://creativecommons.org/](http://creativecommons.org/).
View
55 README.md
@@ -1,20 +1,23 @@
-# SPasswordValidator
+# SPasswordValidator 1.2
-SPasswordValidator is a password validator for the [Yii framework](http://www.yiiframework.com).
+SPasswordValidator is a password validator for the [Yii framework](http://www.yiiframework.com). Tested with yii 1.1.12.
It's to use for a form/model validation rule.
## Features
-- ready to use out of the box (see example basic below)
-- customize parameters
+- Ready to use out of the box (see example basic below)
+
+- Presets to choose required strength (_relax_, _normal_, _strong_)
+- Customize parameters
- minimum number of characters
- minimum number of upper case characters
- minimum number of lower case characters
- minimum number of digits characters
- minimum number of special characters
-- documentation included
-- code quality (coded using unit test)
+- Max parameter to avoid using another validator (in case you store value not encoded)
+- Documentation included
+- Coded using unit tests
## Examples
@@ -29,6 +32,17 @@ It's to use for a form/model validation rule.
}
```
+### With preset
+
+```php
+ public function rules()
+ {
+ return array(
+ array('password','ext.SPasswordValidator.SPasswordValidator', 'preset' => 'relax');
+ );
+ }
+```
+
### With custom parameters
Number of upper case chars set to 1, minimum number of characters set to 10.
@@ -40,22 +54,41 @@ Number of upper case chars set to 1, minimum number of characters set to 10.
array('password','ext.SPasswordValidator.SPasswordValidator', 'up' => 1, 'min' => 10);
);
}
+```
+
+Preset _strong_ plus a _max_ length (in case you store something else that a password, not encrypted)
+```php
+ public function rules()
+ {
+ return array(
+ array('password','ext.SPasswordValidator.SPasswordValidator', 'preset' => 'strong', 'max' => 41);
+ );
+ }
```
+Parameter other than _max_ will be overriden by the preset parameters value.
+
## Installation
-uncompress the archive in `protected/extensions/`. So path to php file will be `protected/extensions/SPasswordValidator/SPasswordValidator.php`.
+Uncompress the archive in `protected/extensions/`. So path to php file will be `protected/extensions/SPasswordValidator/SPasswordValidator.php`.
+
+## Problem ?
+
+[Open an issue](https://github.com/SebSept/YiiPasswordValidator/issues).
## Contribute
-Use to the _fullapp_ branch to fork (include phpunit's unit tests)
+Use to the [_fullapp_ branch](https://github.com/SebSept/YiiPasswordValidator/tree/fullapp) to fork (include phpunit's unit tests)
## Todo
- Add a 'max' parameter to avoid using another rule for attribute length.
-- Add a 'preset' parameter so validator can be quicky parametrized with for example array('password','ext.SPasswordValidator', 'preset' => 'relax')
-## Licence
+## Licences
+
+This code is published under the [Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) licence](http://creativecommons.org/licenses/by-sa/3.0/deed).
+
+### Included
-Code is published under the [Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) licence](http://creativecommons.org/licenses/by-sa/3.0/deed)
+The [_fullapp_](https://github.com/SebSept/YiiPasswordValidator/tree/fullapp) branch includes [YiiDocumentor](http://github.com/laMarciana/yiiDocumentor) published under the GNU LESSER GENERAL PUBLIC LICENSE 3
View
42 doc/api/SPasswordValidator.html
@@ -41,7 +41,7 @@
</tr>
<tr>
<th>Version</th>
- <td>0.2</td>
+ <td>1.2</td>
</tr>
<tr>
<th>Source Code</th>
@@ -50,7 +50,7 @@
</table>
<div id="classDescription">
-SPasswordValidator
+SPasswordValidator
<br/><br/>
Validator for passwords.
Ensure password is strong (at least with default parameters)</div>
@@ -108,6 +108,12 @@
<td>minimal number of lower case characters</td>
<td>SPasswordValidator</td>
</tr>
+<tr id="max">
+ <td><a href="SPasswordValidator.html#max-detail">max</a></td>
+ <td>int</td>
+ <td>No limit if not set. Provided to avoid using length validator</td>
+ <td>SPasswordValidator</td>
+</tr>
<tr class="inherited" id="message">
<td><a href="http://www.yiiframework.com/doc/api/1.1/CValidator/#message-detail">message</a></td>
<td>string</td>
@@ -126,6 +132,12 @@
<td>list of scenarios that the validator should be applied.</td>
<td><a href="http://www.yiiframework.com/doc/api/1.1/CValidator">CValidator</a></td>
</tr>
+<tr id="preset">
+ <td><a href="SPasswordValidator.html#preset-detail">preset</a></td>
+ <td>string</td>
+ <td>If not null preset params will override other params</td>
+ <td>SPasswordValidator</td>
+</tr>
<tr class="inherited" id="safe">
<td><a href="http://www.yiiframework.com/doc/api/1.1/CValidator/#safe-detail">safe</a></td>
<td>boolean</td>
@@ -372,6 +384,18 @@
<p>minimal number of lower case characters</p>
+<div class="detailHeader" id="max-detail">
+max<span class="detailHeaderTag">
+property
+</span>
+</div>
+
+<div class="signature">
+public int <b>$max</b>;</div>
+
+<p>No limit if not set. Provided to avoid using length validator</p>
+
+
<div class="detailHeader" id="min-detail">
min<span class="detailHeaderTag">
property
@@ -384,6 +408,18 @@
<p>minimal number of characters</p>
+<div class="detailHeader" id="preset-detail">
+preset<span class="detailHeaderTag">
+property
+</span>
+</div>
+
+<div class="signature">
+public string <b>$preset</b>;</div>
+
+<p>If not null preset params will override other params</p>
+
+
<div class="detailHeader" id="spec-detail">
spec<span class="detailHeaderTag">
property
@@ -437,7 +473,7 @@
<div class="sourceCode">
<b>Source Code:</b> (<b><a href="#" class="show">show</a></b>)
<div class="code"><code><span style="color: #000000">
-<span style="color: #0000BB"></span><span style="color: #007700">protected&nbsp;function&nbsp;</span><span style="color: #0000BB">validateAttribute</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">)<br />{<br /></span><span style="color: #FF8000">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;checkParams();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$value&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;is&nbsp;a&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if&nbsp;(!</span><span style="color: #0000BB">is_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addError</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">":attribute&nbsp;is&nbsp;a&nbsp;:type&nbsp;and&nbsp;is&nbsp;must&nbsp;be&nbsp;a&nbsp;string."</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">':attribute'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">':type'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">gettype</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;</span><span style="color: #FF8000">//&nbsp;other&nbsp;checks&nbsp;will&nbsp;throw&nbsp;errors&nbsp;or&nbsp;exception,&nbsp;so&nbsp;end&nbsp;validation&nbsp;here.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;number&nbsp;of&nbsp;lower&nbsp;case&nbsp;characters<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'![a-z]!'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$whatever</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">low</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'lower&nbsp;case'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">low</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;number&nbsp;of&nbsp;upper&nbsp;case&nbsp;characters<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'![A-Z]!'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$whatever</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">up</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'upper&nbsp;case'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">up</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;special&nbsp;characters<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'![\W]!'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$whatever</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">spec</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'special'</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">spec</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;digit&nbsp;characters<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'![\d]!'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$whatever</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">digit</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'digit'</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">digit</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;minimum&nbsp;length<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">min&nbsp;</span><span style="color: #007700">=&nbsp;(int)&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">min</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">min</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">min</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span>
+<span style="color: #0000BB"></span><span style="color: #007700">protected&nbsp;function&nbsp;</span><span style="color: #0000BB">validateAttribute</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">applyPreset</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">checkParams</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$value&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;is&nbsp;a&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if&nbsp;(!</span><span style="color: #0000BB">is_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addError</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">":attribute&nbsp;is&nbsp;a&nbsp;:type&nbsp;and&nbsp;is&nbsp;must&nbsp;be&nbsp;a&nbsp;string."</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">':attribute'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">':type'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">gettype</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;</span><span style="color: #FF8000">//&nbsp;other&nbsp;checks&nbsp;will&nbsp;throw&nbsp;errors&nbsp;or&nbsp;exception,&nbsp;so&nbsp;end&nbsp;validation&nbsp;here.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;number&nbsp;of&nbsp;lower&nbsp;case&nbsp;characters<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'![a-z]!'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$whatever</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">low</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'lower&nbsp;case'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">low</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;number&nbsp;of&nbsp;upper&nbsp;case&nbsp;characters<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'![A-Z]!'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$whatever</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">up</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'upper&nbsp;case'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">up</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;special&nbsp;characters<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'![\W]!'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$whatever</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">spec</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'special'</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">spec</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;digit&nbsp;characters<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'![\d]!'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$whatever</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">digit</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'digit'</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">digit</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;minimum&nbsp;length<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">min&nbsp;</span><span style="color: #007700">=&nbsp;(int)&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">min</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">min</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">min</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;max&nbsp;length<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">max&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;(</span><span style="color: #0000BB">$found&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">max</span><span style="color: #007700">)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addErrorInternal</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$attribute</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"max"</span><span style="color: #007700">,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(</span><span style="color: #DD0000">'found'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$found</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">max</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span>
</span>
</code></div>
</div>
View
10 doc/api/manual.hhk
@@ -18,11 +18,19 @@
<param name="Name" value="low">
<param name="Local" value="SPasswordValidator.html#low">
</object>
+ <li><object type="text/sitemap">
+ <param name="Name" value="max">
+ <param name="Local" value="SPasswordValidator.html#max">
+ </object>
<li><object type="text/sitemap">
<param name="Name" value="min">
<param name="Local" value="SPasswordValidator.html#min">
</object>
- <li><object type="text/sitemap">
+ <li><object type="text/sitemap">
+ <param name="Name" value="preset">
+ <param name="Local" value="SPasswordValidator.html#preset">
+ </object>
+ <li><object type="text/sitemap">
<param name="Name" value="spec">
<param name="Local" value="SPasswordValidator.html#spec">
</object>
View
124 protected/extensions/SPasswordValidator/SPasswordValidator.php
@@ -1,15 +1,15 @@
<?php
/**
- * SPasswordValidator
- *
+ * SPasswordValidator
+ *
* Validator for passwords.
* Ensure password is strong (at least with default parameters)
- *
+ *
* @author Sébastien Monterisi <sebastienmonterisi@yahoo.fr>
- * @version 0.2
+ * @version 1.2
*/
class SPasswordValidator extends CValidator
-{
+{
/**
*
* @var int minimal number of characters
@@ -28,21 +28,65 @@ class SPasswordValidator extends CValidator
/**
*
- * @var int minimal number of special characters
+ * @var int minimal number of special characters
*/
public $spec = 2;
-
+
/**
*
- * @var int minimal number of digit characters
+ * @var int minimal number of digit characters
*/
public $digit = 2;
+ /**
+ * No limit if not set. Provided to avoid using length validator
+ * @var int maximum number of chars
+ */
+ public $max;
+
+ /**
+ * If not null preset params will override other params
+ * @var string preset - a set of parameters, @see $_preset
+ */
+ public $preset;
+
+ /**
+ * Do not set a max param in preset because it will override the one provided by validator param
+ * @var preset allowed values
+ */
+ private $_presets = array(
+ self::PRESET_RELAX => array(
+ 'min' => 6,
+ 'up' => 1,
+ 'low' => 1,
+ 'digit' => 1,
+ 'spec' => 0
+ ),
+ self::PRESET_NORMAL => array(
+ 'min' => 6,
+ 'up' => 2,
+ 'low' => 2,
+ 'digit' => 1,
+ 'spec' => 1
+ ),
+ self::PRESET_STRONG => array(
+ 'min' => 8,
+ 'up' => 2,
+ 'low' => 2,
+ 'digit' => 2,
+ 'spec' => 2
+ ),
+);
+
+ const PRESET_RELAX = 'relax';
+ const PRESET_NORMAL = 'normal';
+ const PRESET_STRONG = 'strong';
+
/**
* Validation
- *
+ *
* Function checks whether fulfill this requirements :
* <ul>
* <li>is a string</li>
@@ -57,8 +101,9 @@ class SPasswordValidator extends CValidator
*/
protected function validateAttribute($object, $attribute)
{
-// $this->checkParams();
-
+ $this->applyPreset();
+ $this->checkParams();
+
$value = $object->$attribute;
// is a string
@@ -127,26 +172,71 @@ protected function validateAttribute($object, $attribute)
array('found' => $found, 'required' => $this->min)
);
}
+
+ // max length
+ $found = strlen($value);
+ if($this->max && ($found > $this->max) )
+ {
+ $this->addErrorInternal($object,
+ $attribute,
+ "max",
+ array('found' => $found, 'required' => $this->max)
+ );
+
+ }
+ }
+
+ /**
+ * Apply Preset parameter if set
+ * @return void
+ */
+ private function applyPreset()
+ {
+ if(!$this->preset)
+ return;
+
+ if(array_key_exists($this->preset, $this->_presets))
+ {
+ foreach($this->_presets[$this->preset] As $param => $value)
+ {
+ $this->$param = $value;
+ }
+ }
+ else
+ throw new CException("invalid preset '$this->preset'.");
+ }
+
+ /**
+ * Checks the provided parameters
+ * Checks if sum of required params values is greater than max
+ * @throw CException if more than max
+ */
+ private function checkParams()
+ {
+ $this->max = (int) $this->max;
+ if($this->max && ($this->up + $this->digit + $this->low + $this->spec) > $this->max)
+ throw new CException('Total number of required characters is greater than max : Validation is impossible !');
}
/**
* Adds an error about the specified attribute to the active record.
* This is a helper method that call addError which performs message selection and internationalization.
- *
+ *
* Construct the message and the params array to call addError().
- *
+ *
* @param CModel $object the data object being validated
* @param string $attribute the attribute being validated
* @param string $tested_param the tested property (eg 'upper case') for generating the error message
* @param array $values values for the placeholders :is and :should in the error message - array(['found'] => <int>, ['required'] => <int>)
- */
+ *
+ * @todo change message for correct message with 'max' param
+ */
private function addErrorInternal($object, $attribute,$tested_param, array $values)
- {
+ {
$message = ":attribute doesn't containt enough :tested_param characters. :found found whereas it must be at least :required.";
$params = array(':attribute' => $attribute, ':tested_param' => $tested_param, ':found' => $values['found'], ':required' => $values['required']);
parent::addError($object, $attribute, $message, $params);
}
-
+
}
-?>

0 comments on commit ce272d5

Please sign in to comment.