Skip to content

Commit

Permalink
Fix required and HTML5 support, update sample
Browse files Browse the repository at this point in the history
  • Loading branch information
abdollahpour committed Feb 3, 2015
1 parent 2eeda3c commit 57ecb30
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 45 deletions.
77 changes: 40 additions & 37 deletions bootstrap.validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
var value = i.val();

if(typeof(data[name]) != 'undefined') {
data[name] = [].contact(data[name]).push(value);
data[name] = [].concat(data[name]).concat(value);
} else {
data[name] = value;
}
Expand All @@ -41,16 +41,11 @@
}

/** [data-require] is deprecated use requried instead **/
$("[data-regex],[data-require],[required],[data-equals]", form).each(function() {
$("[data-regex],[data-require],[data-required],[required],[data-equals]", form).each(function() {
var self = $(this);

// disble browser default behavior
self.is("[required]").removeAttr('required').attr('data-required', '');
//
self.is("[data-require]").attr('data-required', '');

var regex = self.attr('data-regex');
var required = self.is('[data-require]') || self.is('[data-required]');
var required = self.is('[required]') || self.is('[data-required]') /* the rest deprecated */ || self.is('[data-require]');
var equals = self.attr('data-equals');
var value = self.val();

Expand All @@ -69,38 +64,46 @@
}
}

if(value && value.length > 0) {
if (typeof(regex) == 'undefined') {
regex = this.type.toLowercase();
}

var r = (function(type) {
switch(type) {
case 'name+family';
return /^((?![0-9]).+\s.+)/g;
case 'name':
case 'family':
return /^((?![0-9]).+)/g;
case 'number':
return /^[0-9]+/g;
case 'url':
return /^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/;
case 'date':
return /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/;
case 'email':
return /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
case 'tel':
return /^[0-9\-\+]{3,25}$/;
default:
return new RegExp(type);
/** array is always valid, because for array inputs we just check required **/
if(!Array.isArray(value)) {
if(value && value.length > 0) {
if (typeof(regex) == 'undefined') {
var type = self.attr('type');
if(type && !$.inArray(type.toLowerCase(), ['text', 'checkbox', 'radio'])) {
regex = type.toLowerCase();
}
}
})(regex);

if(!r.test(value)) {
if (regex) {
var r = (function(regex) {
switch(regex) {
case 'name+family':
return /^((?![0-9]).+\s.+)/g;
case 'name':
case 'family':
return /^((?![0-9]).+)/g;
case 'number':
return /^[0-9]+/g;
case 'url':
return /^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/;
case 'date':
return /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/;
case 'email':
return /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
case 'tel':
return /^[0-9\-\+]{3,25}$/;
default:
return new RegExp(regex);
}
})(regex);

if(!r.test(value)) {
invalids.push(this);
}
}
}
else if(required) {
invalids.push(this);
}
} else if(required) {
invalids.push(this);
}
});

Expand Down
21 changes: 13 additions & 8 deletions sample.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,15 @@
</div>
<div class="form-group">
<label class="control-label">Gender:</label>
<select data-title="Please select gender" name="gender" class="form-control" data-require="">
<option>Choose</option>
<select data-title="Please select gender" name="gender" class="form-control" required>
<option value="">Choose</option>
<option value="mail">Male</option>
<option value="female">Female</option>
</select>
</div>
<div class="form-group">
<label class="control-label">Password:</label>
<input data-title="Please enter valid password" data-require="" name="name" class="form-control" placeholder="Subscriber name" />
<input data-title="Please enter valid password" required name="name" class="form-control" placeholder="Subscriber name" />
</div>
<div class="alert alert-danger">

Expand All @@ -91,29 +91,34 @@
<div class="form-group" style="margin: 0">
<div class="checkbox">
<label>
<input data-title="Select First, Second or Third" data-require="" name="item" type="checkbox" value="1" />First
<!-- we use 'data-required' not 'required' for checkbox, beacuse in non-script mode, browser force user to check them all -->
<input data-title="Select First, Second or Third" data-required='' name="item" type="checkbox" value="1" />First
</label>
</div>
</div>
<div class="form-group" style="margin: 0">
<div class="checkbox">
<label>
<input data-require="" name="item" type="checkbox" value="2" />Second
<input data-required='' name="item" type="checkbox" value="2" />Second
</label>
</div>
</div>
<div class="form-group" style="margin: 0">
<div class="checkbox">
<label>
<input data-require="" name="item" type="checkbox" value="3" />Third
<input data-required='' name="item" type="checkbox" value="3" />Third
</label>
</div>
</div>
<div class="form-group">
<label class="control-label">Name:</label>
<input data-title="Please enter your name" name="email" class="form-control" data-require="" placeholder="Your name" data-regex="^(?![0-9]).*?$" />
<input data-title="Please enter your name" name="email" class="form-control" required placeholder="Your name" data-regex="^(?![0-9]).*?$" />
<!-- ^(?![0-9]).*?$ means should not start with number -->
</div>
<div class="form-group">
<label class="control-label">Date:</label>
<input data-title="Please enter your name" name="date" class="form-control" required placeholder="Date plz!" type="date" />
</div>
<div class="alert alert-danger">

</div>
Expand All @@ -134,7 +139,7 @@
<feildset>
<div class="form-group">
<label class="control-label">Zip code:</label>
<input data-title="Should be numeric with at least 6 number" name="zip" class="form-control" data-require="" data-regex="^[0-9]{6,20}$" />
<input data-title="Should be numeric with at least 6 number" name="zip" class="form-control" required data-regex="^[0-9]{6,20}$" />
</div>
<div class="alert alert-danger">

Expand Down

0 comments on commit 57ecb30

Please sign in to comment.