我对正则表达式不是很擅长,所以这可能是一个简单的问题,但我肯定错过了一些东西。我使用正则表达式来验证用户的特定输入。当且仅当输入字符串不包含逗号且没有空格时(换句话说,输入必须是没有逗号的单个单词),必须接受输入(正则表达式必须匹配)。除此之外,它可以包含任何符号,输入字符串可以包含任何长度。现在,当我使用这个正则表达式时,它匹配输入,不包含逗号。
/^[^,]*$/
我想在其中添加空白部分,因此我创建了这个表达式
/^[^,\s]*$/
表现得非常奇怪。除了一件事,它应该做它应该做的事情。由于某些原因,它匹配(并允许)以空格结尾的字符串(如果它们以逗号结尾,一切正常且不匹配)。我不希望它匹配字符串与尾随空格但我不知道,如何调整正则表达式来做到这一点。所以我的问题是 - 为什么这个奇怪的事情发生了,以及如何改变正则表达式来做它应该做的事情。
这是一个例子: http://jsbin.com/qoyoyagilo/2/edit?html,js,output
甚至更奇怪的是,当我在rubular上尝试我的正则表达式时,它不会将字符串与尾随空格匹配。我开始相信,这必须用javascript而不是我特定的正则表达式
答案 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 $')。
参考文献: