嗨,我有这个正则表达式。
/^[\w]|[åäöæøÅÄÖÆØ]$/
“tå”没问题,但“åå”没有。这是为什么?如何让它接受以åäöæøÅÄÖÆØ开头的单词?
答案 0 :(得分:4)
请注意,\w
(以及\W
,\b
和\B
)以英语为中心。 \w
仅表示[A-Za-z0-9_]
,其中A-Z
仅表示26个英文字母。其他字母不被JavaScript的内置字符类视为“单词”的一部分。
你需要建立一个包含你想要作为单词字符处理的所有字母的字符类(然后在你“非单词字符”的任何地方使用否定版本)。
但这不是唯一的问题。你的正则表达式说:
在字符串的开头匹配一个英文单词字符,或匹配字符串末尾的此字符列表之一。
|
运算符非常贪婪,在这种情况下,它会将^[\w]
和[åäöæøÅÄÖÆØ]$
视为替代方案。我没有得到你想要的印象。
“tå”没问题,但“åå”不是。
我想这取决于“ok”的意思。两者都匹配表达式:
console.log("tå".match(/^[\w]|[åäöæøÅÄÖÆØ]$/)); // ["t", index: 0, input: "tå"]
console.log("åå".match(/^[\w]|[åäöæøÅÄÖÆØ]$/)); // ["å", index: 1, input: "åå"]
"tå"
匹配,因为它与^[\w]
替代匹配。 "åå"
匹配,因为它匹配[åäöæøÅÄÖÆØ]$
替代。
如何让它接受以åäöæøÅ?ÖÆØ?
开头的单词
如果目标是只接受包含一个单词的字符串,其中“word”包含数字和下划线(自\w
起),则:
/^[A-Za-z0-9_åäöæøÅÄÖÆØ]+$/
答案 1 :(得分:0)
为什么你认为它失败了?我不会将\ w放在方括号中,但是各种系统似乎都允许这样,并且以下两者都匹配正在测试的文本。
的Javascript
var test = 'åå';
if (test.match(/^[\w]|[åäöæøÅÄÖÆØ]$/)) { alert("Match"); }
PHP
echo(preg_match("/^[\w]|[åäöæøÅÄÖÆØ]$/","åå")."</br>");
你想在这里实现什么目标?