嗨,我有这个正则表达式。
/^[\w]|[åäöæøÅÄÖÆØ]$/
“tå”是可以的,但“åå”不是。这是为什么?如何让它接受以 åäöæøÅÄÖÆØ 开头的单词?
嗨,我有这个正则表达式。
/^[\w]|[åäöæøÅÄÖÆØ]$/
“tå”是可以的,但“åå”不是。这是为什么?如何让它接受以 åäöæøÅÄÖÆØ 开头的单词?
请注意\w
(and \W
, \b
, and \B
) 是以英语为中心的。\w
just 表示[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>");
你想在这里达到什么目的?