我有一个html输入,例如:
<div class="form-group">
<div class="col-sm-6">
<label for="inputCalculator"
class="control-label">Calculation:</label>
<input class="form-control"
type="text"
[(ngModel)]="properties.calculator"
(keyup)="onKeyUpCalculator($event.key, 0)"
placeholder="Enter Calculator:"
id="inputCalculator"
name="inputCalculator"
autocomplete="off" />
<div *ngIf="calculatorError"
class="alert alert-danger">
The pattern is incorrect
</div>
</div>
如果输入文本来自这种模式,我想检查js:
可以在字符串 OR X开头的X开头,然后是以下运算符之一: +, - ,*,/ ,之后运营商应该有一个号码(浮动号码)和号码后的运营商以及运营商之后的另一个号码等等。
以下是有效输入的一些示例:
我如何在javascript中编写此模式?
答案 0 :(得分:2)
匹配所有这些输入的正则表达式模式是。
/^X((\*|\+|\/|-)\d+)*$/
或更短:
/^X([\*\+\/-]\d+)*$/
您可以对其进行测试here。
^X // start with X
( // start a new group for all the rest
[\*\+\/-] // one of *,+,/,-
\d+ // at least one digit
)* // match stuff like *123 0 or multiple times
$ // match the end of the line
console.log('Should match');
console.log('X is ' + isCorrect('X'));
console.log('X*5466 is' + isCorrect('X*5466'));
console.log('X+2145/24525*3566 is ' + isCorrect('X+2145/24525*3566'));
console.log('X-2345+31101/46704*2*2/8 is ' + isCorrect('X-2345+31101/46704*2*2/8'));
console.log('Should not match');
console.log('Xi is ' + isCorrect('Xi'));
function isCorrect(input) {
return input.match(/^X([\*\+\/\-]\d+)*$/) == null ? false : true
}
&#13;
对于浮点数,我们可以将正则表达式的\d+
部分替换为与浮点数相匹配的部分,例如[-+]?[0-9]*\.?[0-9]+
。
正则表达式将是:
/^X([\*\+\/-][-+]?[0-9]*\.?[0-9]+)*$/