Example for stackoverflow. Dynamic ng-pattern
by Stepan Kasyanenko
HTML
<div ng-app="ExampleApp">
<div ng-controller="ExampleController">
<ng-form name="exampleForm">
<label>Country:</label>
<select ng-model="selectedCountry" ng-options="country as country.countryName for country in countries">
</select>
<label>Phone:</label>
<input type="text" ng-model="phone" name="phone" ng-pattern="phoneNumberPattern()" required>
<small class="error" ng-show="exampleForm.phone.$error.pattern">Invalid pattern.</small>
<small class="error" ng-show="exampleForm.phone.$error.required">Phone number is required.</small>
</ng-form>
</div>
</div>
CSS
.error {
color: red;
font-style: italic;
}
JavaScript
angular.module('ExampleApp', [])
.controller('ExampleController', function($scope) {
$scope.countries = [{
countryName: 'United States',
countryCode: 'USA'
}, {
countryName: 'Canada',
countryCode: 'CAN'
}, {
countryName: 'Bahamas',
countryCode: 'BHS'
}, {
countryName: 'Chile',
countryCode: 'CHL'
}];
$scope.selectedCountry = $scope.countries[0];
var regUSA = /^\(?(\d{3})\)?[ .\/-]?(\d{3})[ .-]?(\d{4})$/;
var regAll = /.*/;
$scope.phoneNumberPattern = function() {
var countryCode = $scope.selectedCountry.countryCode;
var ret = null;
if (countryCode !== 'USA' && countryCode !== 'CAN')
ret = regAll;
else
ret = regUSA;
console.log(ret, countryCode);
return ret;
}
});