AngularJS:正则表达式匹配除了具有特定符号奇怪行为的字符串之外的所有内容

时间:2016-02-09 18:46:30

标签: javascript angularjs regex

我对正则表达式不是很擅长,所以这可能是一个简单的问题,但我肯定错过了一些东西。我使用正则表达式来验证用户的特定输入。当且仅当输入字符串不包含逗号且没有空格时(换句话说,输入必须是没有逗号的单个单词),必须接受输入(正则表达式必须匹配)。除此之外,它可以包含任何符号,输入字符串可以包含任何长度。现在,当我使用这个正则表达式时,它匹配输入,不包含逗号。

/^[^,]*$/

我想在其中添加空白部分,因此我创建了这个表达式

/^[^,\s]*$/

表现得非常奇怪。除了一件事,它应该做它应该做的事情。由于某些原因,它匹配(并允许)以空格结尾的字符串(如果它们以逗号结尾,一切正常且不匹配)。我不希望它匹配字符串与尾随空格但我不知道,如何调整正则表达式来做到这一点。所以我的问题是 - 为什么这个奇怪的事情发生了,以及如何改变正则表达式来做它应该做的事情。

这是一个例子: http://jsbin.com/qoyoyagilo/2/edit?html,js,output

甚至更奇怪的是,当我在rubular上尝试我的正则表达式时,它不会将字符串与尾随空格匹配。我开始相信,这必须用javascript而不是我特定的正则表达式

1 个答案:

答案 0 :(得分:0)

Angular在验证字符串并绑定到模型之前已经修剪了它们。字符串开头和结尾的额外空格甚至不会与正则表达式(或任何其他验证器)匹配。

如果您希望禁用此行为,则可以使用ng-trim="false"

<input ng-model="yourmodelvar" ng-trim="false" ng-pattern="[^,\s]*">

另请注意,您的regexp中不需要^$个字符,因为验证是针对整个字符串自动执行的。来自ng-pattern的文档:

  

如果ngModel $ viewValue值,则设置模式验证错误密钥   与通过评估给出的Angular表达式找到的RegExp不匹配   属性值。如果表达式求值为RegExp对象,   然后直接使用。如果表达式求值为字符串,   然后在将它包装在^和$后将它转换为RegExp   字符。例如,“abc”将转换为新的   正则表达式( '^ ABC $')。

参考文献: