正则表达式行为怪异
Regex acts weird
我想创建一个可以传递给 ng-pattern 的正则表达式,这样输入只有在字符串只有 uppercase/lowercase 个从 a 到 z 的拉丁字母、带波浪号的 n 和带有重音符号的元音;以及点。我想出了我认为是解决方案的方法,但是 angularjs 一直在开发人员工具中告诉我,当字符串为:
时,我的字符串无效
- ñ, Ñ
- á, e, í, ó, ú——同样大写
- 一个点接着一个点接着一个 space——并不是说我真的对它感兴趣,但我认为它应该是有效的。
这就是我得到的:"[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。我尝试了维基中提到的 [Jun|Jul|Aug]
示例中的 |
运算符,但它的行为甚至更奇怪。
这个正则表达式应该可以满足您的需要:
[A-Za-z\.\s\u00C1\u00C9\u00CD\u00D1\u00D3\u00DA\u00E1\u00E9\u00ED\u00F1\u00F3\u00FA]+
您应该使用不区分大小写的正则表达式(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; }
我想创建一个可以传递给 ng-pattern 的正则表达式,这样输入只有在字符串只有 uppercase/lowercase 个从 a 到 z 的拉丁字母、带波浪号的 n 和带有重音符号的元音;以及点。我想出了我认为是解决方案的方法,但是 angularjs 一直在开发人员工具中告诉我,当字符串为:
时,我的字符串无效- ñ, Ñ
- á, e, í, ó, ú——同样大写
- 一个点接着一个点接着一个 space——并不是说我真的对它感兴趣,但我认为它应该是有效的。
这就是我得到的:"[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。我尝试了维基中提到的 [Jun|Jul|Aug]
示例中的 |
运算符,但它的行为甚至更奇怪。
这个正则表达式应该可以满足您的需要:
[A-Za-z\.\s\u00C1\u00C9\u00CD\u00D1\u00D3\u00DA\u00E1\u00E9\u00ED\u00F1\u00F3\u00FA]+
您应该使用不区分大小写的正则表达式(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; }