如何验证输入数字字段的小数点?
How can i validate decimal point for input number field?
有带小数点的货币列表和两个输入字段
第一个是货币,第二个是金额
基于货币select应输入离子量小数点
例如
案例 1:
user select 美元货币金额应为小数点后两位。
如果用户输入超过 2 个小数点需要向用户显示错误消息
案例2:
user select AUD 货币金额应为小数点后 5 位。
如果用户输入超过 5 个小数点需要向用户显示错误消息
验证应该是基于我们需要检查小数点的货币的动态
这次我们需要显示错误信息(查看金额字段,它有 3 个小数点)
<div ng-controller="DemoCtrl" layout="column" ng-cloak="" class="md-inline-form inputdemoBasicUsage" ng-app="MyApp">
<form name="service" novalidate ng-submit="save(service)">
<md-input-container class="md-block" flex-gt-xs>
<label>Currency</label>
<md-select ng-model="service.Currency" required name="Currency" >
<md-option ng-repeat="currency in listofcurrency" value="{{currency.Currency}}">{{currency.Currency}}</md-option>
</md-select>
<div ng-messages="service.Currency.$error">
<div ng-message="required">Currency is required.</div>
</div>
<md-input-container class="md-block" flex-gt-xs>
<label>Amount</label>
<input ng-model="service.amount" type="number" step="0.01" min="0.01" required name="Amount">
<div ng-messages="service.Amount.$error">
<div ng-message="required">Amount is required</div>
<div ng-message="min">Amount must be greater than 0.</div>
</div>
</md-input-container>
<md-button class="md-raised" aria-label="Save" type="submit">
Submit
</md-button>
</form>
</div>
angular
.module('MyApp', ['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
.controller('DemoCtrl', function($scope) {
$scope.listofcurrency =
[
{
"Currency":"USD",
"DecimalDigit":2
},
{
"Currency":"AUD",
"DecimalDigit":5,
},
{
"Currency":"JPY",
"DecimalDigit":0,
}]
})
.config(function($mdThemingProvider) {
// Configure a dark theme with primary foreground yellow
$mdThemingProvider.theme('docs-dark', 'default')
.primaryPalette('yellow')
.dark();
});
您可以使用正则表达式来测试小数点。示例:
function checkDecimal(currency, amount) {
switch (currency) {
case "USD":
var regexp = /^\d+(\.\d{1,2})?$/;
return regexp.test(amount);
case "AUD":
var regexp = /^\d+(\.\d{1,5})?$/;
return regexp.test(amount);
}
}
正则表达式中的 \d{1,2}
定义了应该有多少位数字(在本例中为 1-2 位数字)。
@realme 试试这个:
<div ng-controller="DemoCtrl" layout="column" ng-cloak="" class="md-inline-form inputdemoBasicUsage" ng-app="MyApp">
<form name="service" novalidate ng-submit="save(service)">
<md-input-container class="md-block" flex-gt-xs>
<label>Currency</label>
<md-select ng-model="service.Currency" required name="Currency" ng-change="formatPattern(service.Currency)">
<md-option ng-repeat="currency in listofcurrency" value="{{currency.Currency}}">{{currency.Currency}}</md-option>
</md-select>
<div ng-messages="service.Currency.$error">
<div ng-message="required">Currency is required.</div>
</div>
<md-input-container class="md-block" flex-gt-xs>
<label>Amount</label>
<input ng-model="service.amount" type="number" step="0.01" min="0.01" pattern="{{pattern}}" required name="Amount">
<div ng-messages="service.Amount.$error">
<div ng-message="required">Amount is required</div>
<div ng-message="min">Amount must be greater than 0.</div>
<div ng-message="pattern">Amount must be greater than 0.</div>
</div>
</md-input-container>
<md-button class="md-raised" aria-label="Save" type="submit">
Submit
</md-button>
</form>
</div>
angular
.module('MyApp', ['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
.controller('DemoCtrl', function($scope) {
$scope.listofcurrency =
[
{
"Currency":"USD",
"DecimalDigit":2
},
{
"Currency":"AUD",
"DecimalDigit":5,
},
{
"Currency":"JPY",
"DecimalDigit":0,
}]
$scope.pattern = "";
$scope.formatPattern = function(currency) {
for (var val of $scope.listofcurrency) {
if (val.Currency === currency) {
$scope.pattern = "^\d+(\.\d{1,"+(val.DecimalDigit)+"})?$"
break;
}
}
}
})
.config(function($mdThemingProvider) {
// Configure a dark theme with primary foreground yellow
$mdThemingProvider.theme('docs-dark', 'default')
.primaryPalette('yellow')
.dark();
});
有带小数点的货币列表和两个输入字段 第一个是货币,第二个是金额
基于货币select应输入离子量小数点
例如 案例 1:
user select 美元货币金额应为小数点后两位。
如果用户输入超过 2 个小数点需要向用户显示错误消息
案例2: user select AUD 货币金额应为小数点后 5 位。 如果用户输入超过 5 个小数点需要向用户显示错误消息
验证应该是基于我们需要检查小数点的货币的动态
这次我们需要显示错误信息(查看金额字段,它有 3 个小数点)
<div ng-controller="DemoCtrl" layout="column" ng-cloak="" class="md-inline-form inputdemoBasicUsage" ng-app="MyApp">
<form name="service" novalidate ng-submit="save(service)">
<md-input-container class="md-block" flex-gt-xs>
<label>Currency</label>
<md-select ng-model="service.Currency" required name="Currency" >
<md-option ng-repeat="currency in listofcurrency" value="{{currency.Currency}}">{{currency.Currency}}</md-option>
</md-select>
<div ng-messages="service.Currency.$error">
<div ng-message="required">Currency is required.</div>
</div>
<md-input-container class="md-block" flex-gt-xs>
<label>Amount</label>
<input ng-model="service.amount" type="number" step="0.01" min="0.01" required name="Amount">
<div ng-messages="service.Amount.$error">
<div ng-message="required">Amount is required</div>
<div ng-message="min">Amount must be greater than 0.</div>
</div>
</md-input-container>
<md-button class="md-raised" aria-label="Save" type="submit">
Submit
</md-button>
</form>
</div>
angular
.module('MyApp', ['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
.controller('DemoCtrl', function($scope) {
$scope.listofcurrency =
[
{
"Currency":"USD",
"DecimalDigit":2
},
{
"Currency":"AUD",
"DecimalDigit":5,
},
{
"Currency":"JPY",
"DecimalDigit":0,
}]
})
.config(function($mdThemingProvider) {
// Configure a dark theme with primary foreground yellow
$mdThemingProvider.theme('docs-dark', 'default')
.primaryPalette('yellow')
.dark();
});
您可以使用正则表达式来测试小数点。示例:
function checkDecimal(currency, amount) {
switch (currency) {
case "USD":
var regexp = /^\d+(\.\d{1,2})?$/;
return regexp.test(amount);
case "AUD":
var regexp = /^\d+(\.\d{1,5})?$/;
return regexp.test(amount);
}
}
正则表达式中的 \d{1,2}
定义了应该有多少位数字(在本例中为 1-2 位数字)。
@realme 试试这个:
<div ng-controller="DemoCtrl" layout="column" ng-cloak="" class="md-inline-form inputdemoBasicUsage" ng-app="MyApp">
<form name="service" novalidate ng-submit="save(service)">
<md-input-container class="md-block" flex-gt-xs>
<label>Currency</label>
<md-select ng-model="service.Currency" required name="Currency" ng-change="formatPattern(service.Currency)">
<md-option ng-repeat="currency in listofcurrency" value="{{currency.Currency}}">{{currency.Currency}}</md-option>
</md-select>
<div ng-messages="service.Currency.$error">
<div ng-message="required">Currency is required.</div>
</div>
<md-input-container class="md-block" flex-gt-xs>
<label>Amount</label>
<input ng-model="service.amount" type="number" step="0.01" min="0.01" pattern="{{pattern}}" required name="Amount">
<div ng-messages="service.Amount.$error">
<div ng-message="required">Amount is required</div>
<div ng-message="min">Amount must be greater than 0.</div>
<div ng-message="pattern">Amount must be greater than 0.</div>
</div>
</md-input-container>
<md-button class="md-raised" aria-label="Save" type="submit">
Submit
</md-button>
</form>
</div>
angular
.module('MyApp', ['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
.controller('DemoCtrl', function($scope) {
$scope.listofcurrency =
[
{
"Currency":"USD",
"DecimalDigit":2
},
{
"Currency":"AUD",
"DecimalDigit":5,
},
{
"Currency":"JPY",
"DecimalDigit":0,
}]
$scope.pattern = "";
$scope.formatPattern = function(currency) {
for (var val of $scope.listofcurrency) {
if (val.Currency === currency) {
$scope.pattern = "^\d+(\.\d{1,"+(val.DecimalDigit)+"})?$"
break;
}
}
}
})
.config(function($mdThemingProvider) {
// Configure a dark theme with primary foreground yellow
$mdThemingProvider.theme('docs-dark', 'default')
.primaryPalette('yellow')
.dark();
});