2013-06-20 4 views
0

Привет У меня есть это регулярное выражение.Регулярное выражение со специальными символами

/^[\w]|[åäöæøÅÄÖÆØ]$/ 

"tå" в порядке, но "åå" - нет. Почему это? Как я могу заставить его принимать слова, начиная с åäöæøÅÄÖÆØ?

+0

Удалите '' '. '[]' обозначает класс символов. – devnull

+0

* "" tå "в порядке, но" åå "нет." * Ну, они оба соответствуют выражению.'' tå "' совпадает, поскольку он соответствует альтернативе '^ [\ w]. '' åå'', потому что он соответствует альтернативе '[åäöæøÅÄÖÆØ] $. –

ответ

4

Обратите внимание, что \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_åäöæøÅÄÖÆØ]+$/ 
+0

спасибо нет $ в конце? – pethel

+0

@ user874774: Не совсем понятно, что вы ищете. Если ваша цель - видеть, содержит ли строка * только одно слово *, тогда да, положите '$' в конце. –

+0

Да, спасибо за прозвище. – pethel

0

Почему вы думаете, это не удается? Я бы не поставил \ w в квадратных скобках, но различные системы, похоже, позволяют это, и оба они соответствуют тестируемому тексту.

Javascript

var test = 'åå'; 
if (test.match(/^[\w]|[åäöæøÅÄÖÆØ]$/)) { alert("Match"); } 

PHP

echo(preg_match("/^[\w]|[åäöæøÅÄÖÆØ]$/","åå")."</br>"); 

Что вы пытаетесь достичь здесь?

Смежные вопросы