【问题标题】:Cyrillic alphabet validation西里尔字母验证
【发布时间】:2011-09-09 13:16:55
【问题描述】:

我今天遇到了一个有趣的缺陷,问题是我在俄罗斯部署了我的 Web 应用程序,并且名称值“Наталья”在下面的方法中没有作为 alphaNumeric 返回 true。对人们如何处理这样的问题感到好奇! - 邓肯

private boolean isAlphaNumeric(String str) {
    return str.matches("[\\w-']+");
}

【问题讨论】:

  • 没错!我如何接受我不明白的有效答案!请帮忙!
  • @Eugene 你指的是我提供的答案吗?
  • 没关系,我想通了,我可以通过单击复选框来接受答案。我接受了您的回答,感谢您提供的信息。

标签: java regex validation unicode internationalization


【解决方案1】:

就我而言,我必须检查它是否是用俄语写的名字。

我已经结束了:

private static final String ruNameRegEx = "[А-ЯЁ][-А-яЁё]+";

全名:

private static final String ruNamePart = "[А-яЁё][-А-яЁё]+";
private static final String ruFullNameRegEx = "\\s*[А-ЯЁ][-А-яЁё]+\\s+(" + ruNamePart + "\\s+){1,5}" + ruNamePart + "\\s*";)";

最后一个涵盖了一些复杂的案例:

public class Test {
    Pattern ruFullNamePattern = Pattern.compile(ruFullNameRegEx);

    @Test
    public void test1() {
        assertTrue(isRuFullName("Иванов Василий Иванович"));
    }

    @Test
    public void test2() {
        assertTrue(isRuFullName(" Иванов Василий Акимович "));
    }

    @Test
    public void test3() {
        assertTrue(isRuFullName("Ёлкин Василий Иванович"));
    }

    @Test
    public void test4() {
        assertTrue(isRuFullName("Иванов Василий Аксёнович"));
    }

    @Test
    public void test5() {
        assertFalse(isRuFullName("иванов василий акимович"));
    }

    @Test
    public void test6() {
        assertFalse(isRuFullName("Иванов С.В."));
    }

    @Test
    public void test7() {
        assertTrue(isRuFullName("Мамин-Сибиряк Анна-Мария Иоановна"));
    }

    @Test
    public void test8() {
        assertTrue(isRuFullName("Хаджа Насредин Махмуд-Азгы-Бек"));
    }

    @Test
    public void test9() {
        assertTrue(isRuFullName("Хаджа Насредин ибн Махмуд"));
    }

    private boolean isRuFullName(String testString) {
        Matcher m = ruFullNamePattern.matcher(testString);
        return m.matches();
    }
}

【讨论】:

    【解决方案2】:

    您必须使用 Unicode 正则表达式。例如 \p{L}+ 用于任何 unicode 字母。如需更多信息,请查看java.util.Pattern 的 java 文档,其中有一个名为 unicode support 的部分。另外,这里有详细信息:link

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多