Regex действует странно

Я хочу создать выражение регулярного выражения, которое я могу передать в ng-pattern, чтобы ввод был действительным только в том случае, если строка содержит только латинские буквы в верхнем / нижнем регистре от a до z, n с тильдой и гласные с острыми акцентами; а также точка. Я придумал то, что я считал решением, но 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]+"

Что я делаю неправильно?

PS я попробовал | Оператор упоминается в вики для [Jun|Jul|Aug] пример, но это действует еще более странно.

2 ответа

Решение

Это регулярное выражение должно работать для ваших нужд:

[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; }

Другие вопросы по тегам