Привет У меня есть это регулярное выражение.Регулярное выражение со специальными символами
/^[\w]|[åäöæøÅÄÖÆØ]$/
"tå" в порядке, но "åå" - нет. Почему это? Как я могу заставить его принимать слова, начиная с åäöæøÅÄÖÆØ?
Привет У меня есть это регулярное выражение.Регулярное выражение со специальными символами
/^[\w]|[åäöæøÅÄÖÆØ]$/
"tå" в порядке, но "åå" - нет. Почему это? Как я могу заставить его принимать слова, начиная с åäöæøÅÄÖÆØ?
Обратите внимание, что \w
(и \W
, \b
и \B
) является английским-ориентированными. \w
только что означает [A-Za-z0-9_]
, где A-Z
означает только 26 английских букв. Другие буквы не считаются частью «слова» встроенными символьными классами JavaScript.
Вам нужно будет создать класс символов, включающий все буквы, которые вы хотите рассматривать как символы слова (затем используйте отрицательную версию этого, где бы вы не были символом слова).
Но это не единственная проблема. Регулярное выражение говорит:
Матч один английский символ слова в начале строки, или матч один из этого списка символов в конце строки.
|
оператор довольно жадный, в этом случае он рассматривает ^[\w]
и [åäöæøÅÄÖÆØ]$
в качестве альтернативы. Мне не кажется, что это то, что вы хотели.
"tå" в порядке, но "åå" не является.
Я думаю, это зависит от того, что вы подразумеваете под «нормально». Оба соответствуют выражению:
console.log("tå".match(/^[\w]|[åäöæøÅÄÖÆØ]$/)); // ["t", index: 0, input: "tå"]
console.log("åå".match(/^[\w]|[åäöæøÅÄÖÆØ]$/)); // ["å", index: 1, input: "åå"]
"tå"
матчи, потому что он соответствует ^[\w]
альтернативы. "åå"
, поскольку он соответствует альтернативе [åäöæøÅÄÖÆØ]$
.
Как я могу принять его слова, начинающиеся на åäöæøÅÄÖÆØ?
Если цель состоит в том, чтобы принимать только строки, содержащие ровно одно слово, где «слово» включает в себя цифры и подчеркивание (так как \w
делает), то:
/^[A-Za-z0-9_åäöæøÅÄÖÆØ]+$/
Почему вы думаете, это не удается? Я бы не поставил \ w в квадратных скобках, но различные системы, похоже, позволяют это, и оба они соответствуют тестируемому тексту.
Javascript
var test = 'åå';
if (test.match(/^[\w]|[åäöæøÅÄÖÆØ]$/)) { alert("Match"); }
PHP
echo(preg_match("/^[\w]|[åäöæøÅÄÖÆØ]$/","åå")."</br>");
Что вы пытаетесь достичь здесь?
Удалите '' '. '[]' обозначает класс символов. – devnull
* "" tå "в порядке, но" åå "нет." * Ну, они оба соответствуют выражению.'' tå "' совпадает, поскольку он соответствует альтернативе '^ [\ w]. '' åå'', потому что он соответствует альтернативе '[åäöæøÅÄÖÆØ] $. –