AngularJS自帶了很多驗證,什麼必填,最大長度,最小長度...,這裡記錄幾個有用的正則式驗證
正則式驗證
只需要配置一個正則式,很方便的完成驗證,理論上所有的驗證都可以用正則式完成
//javascript
$scope.mobileRegx = "^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\\d{8}$";
$scope.emailRegx = "^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$";
$scope.pwdRegx = "[a-zA-Z0-9]*";
<div class="form-group">
<input class="form-control" name="mobile" type="text" ng-model="account.mobile" required ng-pattern="mobileRegx"/>
<span class="error" ng-show="registerForm.$submitted && registerForm.mobile.$error.required">*手機號不能為空</span>
<span class="error" ng-show="registerForm.$submitted && registerForm.mobile.$error.pattern">*手機號地址不合法</span>
</div>
<input type="text" ng-pattern="/[a-zA-Z]/"/>
數字
設置input的type=number即可
<div class="form-group col-md-6">
<label for="password">
預估時間
</label>
<div class="input-group">
<input required type="number" class="form-control" ng-model="task.estimated_time" name="time"/>
<span class="input-group-addon">分鐘</span>
</div>
<span class="error" ng-show="newTaskForm.$submitted && newTaskForm.time.$error.required">*請預估時間</span>
</div>
郵箱
<input type="email" name="email" ng-model="user.email"/>
URL
<input type="url" name="homepage" ng-model="user.facebook_url"/>
效果
效果是實時的,很帶感
相對於上面的每個驗證都要自己寫代碼判斷,ngMessages提供了一種更為簡潔的方式
https://docs.angularjs.org/api/ngMessages/directive/ngMessages
angular.module('ngMessagesExample', ['ngMessages']);
<form name="myForm">
<label>
Enter your name:
<input type="text" name="myName" ng-model="name" ng-minlength="5" ng-maxlength="20" required/>
</label>
<pre>myForm.myName.$error = {{ myForm.myName.$error | json }}</pre>
<!--需要配合 ng-if使用,否則一開始就顯示出來了, 你摸了就會觸發驗證-->
<div ng-messages="myForm.myName.$error" role="alert" ng-if="myForm.myName.$touched">
<div ng-message="required">You did not enter a field</div>
<div ng-message="minlength">Your field is too short</div>
<div ng-message="maxlength">Your field is too long</div>
</div>
</form>
簡直是第二次解放啊。。。
如果你有一部分form的內容是動態生成的,數量和名字都不確定的時候,該如何驗證這些生成的元素呢?其實維護一個動態的form本來就是個問題。但是在angular中,只需要記住一點:准備好你的數據,其他的交給angular。像下面這個例子,你只需要維護好一個數組,然後利用ng-repeat就可以快速的呈現到頁面上。
其實動態的form和一般的form驗證都是一致的,只是動態的form需要使用myForm[inout_name].$error
的形式訪問
<!-- 動態顯示狀態的負責人 -->
<div class="form-group col-md-6" ng-repeat="sta in task.status_table | orderBy : sta.sequence_order">
<label>{{sta.status_name}} 負責人</label>
<select required class="form-control" ng-model="sta.user_id" ng-options="qa.id as qa.last_name+' '+qa.last_name for qa in taskUserList" name="{{sta.status_name}}">
</select>
<div ng-messages="newTaskForm[sta.status_name].$error" ng-if="newTaskForm.$submitted || newTaskForm[sta.status_name].$touched">
<p class="error" ng-message="required">*請選擇負責人</p>
</div>
</div>
有些表單我們不希望粗暴的在下面添加文字信息提示驗證,而是希望更簡潔的方式,如:加亮邊框,突出顯示
需要做的只是在required驗證沒通過的時候添加class,改變元素的樣式即可
<form name="loginForm" novalidate ng-submit="loginPost()" class="navbar-form navbar-right" ng-hide="login">
<fake-autocomplete></fake-autocomplete>
<div class="form-group">
<input name="user_name" required maxlength="50" type="text" class="form-control" placeholder="手機號或郵箱" ng-model="account.user_name" ng-class="{warn:loginForm.$submitted && loginForm.user_name.$error.required}">
</div>
<div class="form-group">
<input name="password" required type="password" maxlength="50" placeholder="密碼" ng-model="account.password" ng-class="{'form-control':1,warn:loginForm.$submitted && loginForm.password.$error.required}">
</div>
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-lock"></span> 登錄</button>
</form>
.warn {
border-color: #f78d8d !important;
outline: 0 !important;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgb(239, 154, 154) !important;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(239, 154, 154) !important;
}
一些AngularJS相關文章鏈接:
AngularJS權威教程 清晰PDF版 http://www.linuxidc.com/Linux/2015-01/111429.htm
希望你喜歡,並分享我的工作~帶你走近AngularJS系列:
如何在 AngularJS 中對控制器進行單元測試 http://www.linuxidc.com/Linux/2013-12/94166.htm
在 AngularJS 應用中通過 JSON 文件來設置狀態 http://www.linuxidc.com/Linux/2014-07/104083.htm
AngularJS 之 Factory vs Service vs Provider http://www.linuxidc.com/Linux/2014-05/101475.htm
AngularJS —— 使用 ngResource、RESTful APIs 和 Spring MVC 框架提交數據 http://www.linuxidc.com/Linux/2014-07/104402.htm
AngularJS 的詳細介紹:請點這裡
AngularJS 的下載地址:請點這裡