Gry*_*h G 5 javascript regex validation angularjs
我需要一些帮助.
我必须为angularjs ng-pattern属性构造一个正则表达式.正则表达式必须验证文本,而不是每行或某些部分.文本必须包含一些精确为2位小数的金额,每个金额应输入新行.此外,在每个金额之前和之后接受空格.如果一行包含2个金额,则整个文本无效.
例如,此文本有效,因为每个金额都在新行中输入:
123.34
12345.56
2.54
Run Code Online (Sandbox Code Playgroud)
此示例无效,因为一行包含2个金额:
12.43
123.32 2345.54
124.43
Run Code Online (Sandbox Code Playgroud)
此示例无效,因为一个金额不包含2个小数(每个金额必须精确为2个小数):
123
123.43
123.65
Run Code Online (Sandbox Code Playgroud)
我最好的尝试是^(([0-9]+[.][0-9]{2})\s*)+$,它可以在这里测试.但是我的正则表达式还不够,因为它接受同一行中多个金额的文本.
谢谢
正则表达式不是我的强项,所以可能有一个更简单的方法来做到这一点,但这确实符合您的要求:
^(([^\S\r\n]*[0-9]+[.][0-9]{2}[^\S\r\n]*)\n)*(([^\S\r\n]*[0-9]+[.][0-9]{2}[^\S\r\n]*))$
Run Code Online (Sandbox Code Playgroud)
它的作用实际上是确保最后一行(末尾没有换行符)总是存在,但也允许在换行前的可选行以换行符(\n)结束.
我们还使用该[^\S\r\n]部分\s来确保它检查除换行之外的空格字符,因为换行是导致在同一行上验证多个值的问题.
您可以使用
ng-pattern="/^[^\S\r\n]*\d+\.\d{2}(?:[^\S\r\n]*\r?\n[^\S\r\n]*\d+\.\d{2})*[^\S\r\n]*$/"
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示。
或者,由于默认情况下,角度会在将输入发送到正则表达式引擎之前对其进行修剪(如果您没有ng-trim或有的话ng-trim="true"),您也可以使用
ng-pattern="/^\d+\.\d{2}(?:[^\S\r\n]*\r?\n[^\S\r\n]*\d+\.\d{2})*$/"
Run Code Online (Sandbox Code Playgroud)
或者,如果您想确保开始/结束处没有空行,请使用第一个正则表达式与ng-trim="false".
图案细节
^- 字符串的开头[^\S\r\n]*- 任何 0+ 水平空格\d+- 1 位或多位数字\.- 一个.字符\d{2}- 2 位数字(?:- 非捕获组匹配的开始...
[^\S\r\n]*- 任何 0+ 水平空格\r?\n- 换行序列[^\S\r\n]*\d+\.\d{2} - 任何 0+ 水平空白、1+ 数字.和 2 数字)*- ...零次或多次[^\S\r\n]*- 任何 0+ 水平空格$- 字符串末尾。| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |