【问题标题】:Regex Java vs Regex Javascript正则表达式 Java 与正则表达式 Javascript
【发布时间】:2015-12-03 09:59:27
【问题描述】:

我有一个 Web 应用程序和一个 Android 应用程序,我想在其中检查输入。

现在我用 Java 创建了这个正则表达式:

private static final String NAME_REGEX = "^[\\w ]+$";
if (!Pattern.matches(NAME_REGEX, name)) {
    mNameView.setError(getString(R.string.error_field_noname));
    focusView = mNameView;
    cancel = true;
}

在 JavaScript 中我想测试相同的,所以我使用了:

var re = /^[\w ]+$/;
if (!re.test(company)) {
...
}

除了 Java 版本接受字符 ä、ö、ü、ó、á (...) 而 JavaScript 版本不接受之外,一切正常。

不知道上面提到的代码有什么区别?

最后最重要的是两者(JavaScript 和 Java)的工作方式完全相同。

目标: 获取与 Java (^[\\w ]+$) 完全相同的 Javascript 正则表达式

【问题讨论】:

  • 如果您不想重新发明轮子,则必须使用XRegExp。或者为您接受的字母创建一个字符类。您需要接受所有 Unicode 基本字母吗?看看this answer of mine。只需将_ 添加到re 变量中的字符类(并删除第一个#)。

标签: javascript java android regex


【解决方案1】:

请使用以下正则表达式。

var re=^[äöüß]*$

上面的正则表达式也将允许这些字符。

如果你想使用特殊字符和字母,请使用下面的

var re=^[A-Za-z0-9!@#$%^&*äöüß()_]*$

【讨论】:

    【解决方案2】:

    试试这个:/^[\wäöüß ]+$/i

    请注意“不区分大小写”的修饰符i,否则它将与ÄÖÜ 不匹配。

    这些语言使用不同的引擎来读取 RegExp。 Java 比 JavaScript 更好地支持 unicode。

    见:https://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines#Part_2

    【讨论】:

    • 感谢您的建议,但 Ó,á 等字符也应该可以使用。所以这就是java中的行为,这就是我想在Javascript中实现的。
    • 好的,我明白了。所以你可以阅读这篇文章的答案:stackoverflow.com/questions/150033/….
    【解决方案3】:

    因此,最先进的技术是必须使用库才能在 javascript 中获得与在 java 中相同的结果。

    因为这对我来说不是一个真正的解决方案,所以我只是在 JavaScript 中使用它:

                var re = /^[A-Za-z0-9_öäüÖÄÜß ]+$/;
    

    还有这个用 Java 写的:

    private static final String NAME_REGEX = "^[A-Za-z0-9_öäüÖÄÜß ]+$";
    

    所以这在两种环境中似乎完全相同。

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 2015-12-29
      • 2017-09-27
      • 1970-01-01
      • 2013-09-09
      • 2016-09-28
      • 2013-01-18
      相关资源
      最近更新 更多