正则表达式很奇怪

时间:2017-03-15 18:00:37

标签: javascript angularjs regex validation angularjs-ng-pattern

我想创建一个我可以传递给ng-pattern的正则表达式,这样输入只有在字符串只包含a到z的大写/小写拉丁字母,n和tilde,以及带尖锐元音的元音时才有效;还有点。我提出了我认为的解决方案,但angularjs一直在开发人员工具中告诉我,当字符串为:时,我的字符串无效:

  • ñ,Ñ
  • á,e,í,ó,ú-也是大写
  • 一个点后跟一个点后跟一个空格 - 不是我真的对此感兴趣,但我认为它应该是有效的。

这就是我所拥有的:"[A-Za-z\.\s\U+00C1\U+00C9\U+00CD\U+00D1\U+00D3\U+00DA\U+00E1\U+00E9\U+00ED\U+00F1\U+00F3\U+00FA]+"

我做错了什么?

P.S。我在wiki中为|示例尝试了[Jun|Jul|Aug]运算符,但它甚至更奇怪。

2 个答案:

答案 0 :(得分:1)

这个正则表达式应该可以满足您的需求:

[A-Za-z\.\s\u00C1\u00C9\u00CD\u00D1\u00D3\u00DA\u00E1\u00E9\u00ED\u00F1\u00F3\u00FA]+

答案 1 :(得分:1)

您应该使用不区分大小写的正则表达式(i标志)并使用\xHH而不是\u+00HH转义您的特殊字符。



var regex = /^[a-z.\s\xC1\xC9\xCD\xD1\xD3\xDA\xE1\xE9\xED\xF1\xF3\xFA]+$/i

var valid = 'ñ Ñ á e í ó ú'.split(' ')
var invalid = '0 ; Ć'.split(' ')

console.log('Valid:')
valid.forEach(function (e) {
  console.log(regex.test(e)) //=> true
})

console.log('Invalid:')
invalid.forEach(function (e) {
  console.log(regex.test(e)) //=> false
})

.as-console-wrapper { min-height: 100vh; }