after inserting the expression given by you I am finding a lexer error check this image
<div class="col-md-6 nopad">
<div class="form-group">
<label class="control-label text-left">(%)</label>
<input type="text" required class="form-control"
ng-pattern="^(?!0+(?:\.0+)?$)\[0-9]?\[0-9](?:\.\[0-9]\[0-9]?)?$"
ng-blur="($ctrl.expenseForm.insurance_percent.$valid)?$ctrl.updateAmountValue('insurance',$ctrl.expenses.total_cfcost):''"
id="insurance_percent" name="insurance_percent"
ng-model="$ctrl.expenses.insurance_percent">
<div class="help-block"
ng-messages="$ctrl.expenseForm.insurance_percent.$error"
ng-if="$ctrl.expenseForm.insurance_percent.$dirty">
<p class="text-danger"
ng-message="required">This field is required.</p>
<p class="text-danger"
ng-message="pattern">Value should between 0 to 100.</p>
</div>
</div>
</div>
它应该接受十进制数或验证0到100之间的数字,并且它应该接受以点(。)开头的十进制值,在开始时不需要为十进制数,也应该在0之间和100。
^(?=[0-9.])[0-9]{0,2}(\.[0-9]+)?$|^100$
我将问题分为4个部分
1)它应该是(?=[0-9.])
与数字或点匹配的先行
2)整数部分:[0-9]{0,2}
是optionnal
3)小数部分:(\.[0-9]+)?
是optionnal
4)100例
我可能会尝试一个稍微简单的正则表达式,它不是一个特别复杂的问题,它会使可维护性更容易。
像^[0-9]{0,2}(\.[0-9]+)?$
之类的东西
^ Start of string
[0-9]{0,2} Anywhere between 0 and 2 numbers
(\. Start matching group and look for decimal point
[0-9]+ Any numbers after decimal point (must be at least one)
)?$ End matching group, match it either 0 or 1 times and ensure string end.
请注意,这也将匹配一个空白字符串,这意味着您不会在没有输入时收到警告!