【问题标题】:Regular expression not working for at least one European character正则表达式至少对一个欧洲字符不起作用
【发布时间】:2015-08-28 04:41:10
【问题描述】:

我正在检查我的字符串是否包含至少一个欧洲语言的字符(例如:德语、西班牙语、英语等...)

我尝试如下:

var check = "abc";

if(check.match(/^[a-zA-ZäöåÄÖÅ]+$/)){
               alert("if");
               }
   else{
   alert("else");
   }

只有在至少具有欧洲语言字符的情况下才能工作。如果只有数字,则不应该工作。请各位大侠指导!!

【问题讨论】:

  • /^ 部分表示仅匹配字符串的第一个字符。此外,如果您只想找出是否有 一个 EU 字符,则不需要+。像check.test(/[a-zA-ZäöåÄÖÅ]/) 这样的东西就可以完成这项工作。

标签: javascript regex


【解决方案1】:

您只需要删除锚点和量词并使用test

alert(/(?![×÷])[A-Za-zÀ-ÿ]/.test("ß1111"))
alert(/(?![×÷])[A-Za-zÀ-ÿ]/.test("ö"))
alert(/(?![×÷])[A-Za-zÀ-ÿ]/.test("12345"))

(?![×÷])[A-Za-zÀ-ÿ] 正则表达式是对Useful ASCII Ranges 中提供的正则表达式的改编。它将捕获所有拉丁字符和重音字符。

您可以使用更多language-related character ranges

法语字母:[a-zA-ZàâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒ]

德语字母:[a-zA-ZäöüßÄÖÜ]

波兰语仅限字母:[a-pr-uwy-zA-PR-UWY-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]注意波兰语中没有 QVX,但如果您想允许所有英文字母也一样,使用[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ])

意大利语字母:[a-zA-ZàèéìíîòóùúÀÈÉÌÍÎÒÓÙÚ]

西班牙语字母:[a-zA-ZáéíñóúüÁÉÍÑÓÚÜ]

还有更多...

瑞典语[a-zA-ZäöåÄÖÅ] (link)

挪威人[a-zA-ZæøåÆØÅ] (link)

丹麦语(与挪威语相同):[a-zA-ZæøåÆØÅ] (link)

希腊语和科普特语+希腊语扩展[\u0370-\u03FF\u1F00-\u1FFF] (link)

俄语[а-яА-ЯёЁ] (link)

乌克兰语[а-щА-ЩЬьЮюЯяЇїІіЄєҐґ] (link)

塞尔维亚语(西里尔文)[А-ИК-ШЂЈ-ЋЏа-ик-шђј-ћџ] (link)

保加利亚语(俄语字母的子集):[а-ъьюяА-ЪЬЮЯ] (link)

白俄罗斯脚本范围:[ёа-зй-шы-яЁА-ЗЙ-ШЫІіЎў] (link)

罗马尼亚语[a-zA-ZĂÂÎȘȚăâîșț] (link)

【讨论】:

  • 感谢您的快速回答。你是很棒的哥们!
  • 好的,我看到您正在寻找欧洲语言中使用的所有字符。这不是一项微不足道的任务。您可以检查Regular Expression: Match Unicode Block Range 来构建您需要的范围,只选择您要检查的那些脚本。
  • 知道了,伙计 /[a-zA Z\x7f- \xff]/ 它对我有用。我尝试过这个!!非常感谢您宝贵的时间!!
  • @Jongware:是的,我明白你的意思。我现在正在添加更多脚本范围。
  • @stribizhev:实际上,乌克兰人认为撇号 (') 是一个字母,而不是标点符号,所以你或许也应该把它包括在内。
猜你喜欢
  • 1970-01-01
  • 2013-05-29
  • 2013-06-24
  • 1970-01-01
  • 2011-01-26
  • 2012-01-26
  • 1970-01-01
  • 2022-11-24
相关资源
最近更新 更多