使用jQuery和带重音字符的正则表达式

3
我正在寻找一个正则表达式来验证输入: 在法国,我们可以在姓名中使用带重音符号的字母,但我找不到任何可用的内容。 请问您能否帮助我找到如何编写以下内容的正则表达式: - 任意字母 - 任意带重音符号的字母 - 空格 - 减号 "-"(不包括引号)
我尝试了以下正则表达式,但似乎无法工作: var regealpha =/[^A-Za-z0-9ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]/;
谢谢您的帮助(对我的糟糕英语表示抱歉...我是个青蛙 ^^)

不清楚您需要匹配什么。您能给我们一个例子吗? - Karolis
非常感谢您的所有答案!!!它们都很好,但我的问题是:谁的名字里有数字?(也许是R2D2或C-3PO...)。我需要测试的只是是否可以在名称中找到所有种类的字符:[a-z] [A-Z]空格(组合名称)破折号(组合名称)sp,所以最好的方法是:/ ^ [a-zA-Z', -] + $ / - kangun
编辑您的问题以包含一些示例。包括正确和不正确的名称。 - James Wiseman
我希望我理解得正确。 - James Wiseman
2个回答

5

JavaScript似乎没有很好的国际化选项。符号\w会给你所有的[A-Za-z0-9_],但是除此之外,你需要指定自己的字符。

你似乎已经很接近了。以下正则表达式应该适用于你:

/[\wÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]/g

请在此jsfiddle中查看其运行情况:

http://jsfiddle.net/jameswiseman/3H2mJ/1/

您将会看到正则表达式将输入字符串 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ" 中的所有内容替换为 'z'。

编辑

我认为这就是您需要的内容:

/[^a-zA-ZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]/

它将告诉您是否存在不在上述集合中的字符。因此,
var myRegex = /[^a-zA-ZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]/;
"C3P0".test(myRegex ); //returns true --> Report Error!
"kangun".test(myRegex ); //returns false --> OK :-)
"kàngun".test(myRegex ); //returns false --> OK :-)

同时也可以查看这个JSFiddle

我知道它很长,但如果需要的话,你应该使用它。


不错,但是太长了,我不需要在名字或姓氏中有数字... :) - kangun
谢谢,但我不需要在名字或姓氏中包含数字,我对自己需要的东西解释得不好(我的英语写得不流利...真的不好意思...) - kangun

1

也许你想使用\p{L}如此描述),它可以匹配Unicode字母。


@levu,JavaScript支持这个吗? - Karolis
除了匹配单个字符外,不支持Unicode。 (http://www.regular-expressions.info/javascript.html) -> 应该是可能的 - Florian
@levu,我在Firefox上测试了\p{L} here,但似乎不起作用。 - Karolis
我使用了变量 regealpha = /^[a-zA-Z ',-]+$/; - kangun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接