正则表达式ng-pattern angularjs

时间:2014-04-03 10:18:58

标签: javascript regex angularjs ng-pattern

我必须验证输入字段,但是当用户在输入中复制和粘贴某些东西时我遇到了问题

这是我的代码

<input type="text" ng-change="calculate()" ng-pattern="coordsPattern" ng-model="from" class="input-coords" placeholder="(x|y)">

coordsPattern是:

$scope.coordsPattern = /^\(?\-?\d{1,3}\|\-?\d{1,3}\)?$/;

输入可以

(158|158)  
-158|158  
(-158|158  

.....等

但是当用户从不同的页面复制并粘贴相同的内容时,根据浏览器到浏览器,输入看起来像(158|158),但模式无效,因为复制时,字符之间有隐藏的选项卡或空格。例如

((tab)(tab)158(tab)|(tab)(tab)-158(tab)

但在输入文本中看起来像(158|-158,因此对于用户来说是有效的输入
输入有效(因为在calculate()函数中我清空了空格和制表符的输入)但是对于该模式无效且角度没有执行calculate()函数。

这是一个复制和粘贴文本,其中包含隐藏的标签

(‭-‭91‬‬|‭-‭18‬‬)

谢谢

编辑

这是字符串

的var_dump
string '(‭-‭91‬‬|‭-‭18‬‬)' (length=33)

它包含特殊字符!没有标签或空格!
也许我必须找到一个不同的解决方案来验证输入...

2 个答案:

答案 0 :(得分:0)

$scope.coordsPattern = /^\s*?\(?\s*?\-?\s*?\d{1,3}\s*?\|\s*?\-?\s*?\d{1,3}\s*?\)?\s*?$/;

即使插入了空白字符,这也应与预期输入匹配。

答案 1 :(得分:0)

  

确保浏览器和编辑器使用UTF-8编码而不是   ISO-8859-1 / Windows-1252。

https://stackoverflow.com/a/2477460/244811