如何屏蔽 BootsFaces 和 PrimeFaces 中的非西方拉丁字符?

How to mask non Western Latin characters in BootsFaces and PrimeFaces?

我需要使用 PrimeFaces p:inputMask 和 BootsFaces p:inputText 为某些输入字段添加输入掩码。 所需的掩码应该只接受阿拉伯字母加一些数字。 我的问题是:我不知道该怎么做,任何帮助将不胜感激。

可以使用正则表达式匹配阿拉伯字符。参见 Include Arabic characters in JavaScript regular expression?

BootsFaces

1.3 及更高版本

BootsFaces 1.3 及更高版本支持掩码中的正则表达式,例如:

<b:inputText mask="{ regex: '[0-9\u0600-\u06FF]*' }" />

1.3 之前

BootsFaces 附带 Inputmask by Robin Herbots. Before 1.3 the mask attribute in b:inputText only allows you to pass a mask expression. In a mask expression you cannot use regular expressions. However, the Inputmask library does support regular expressions。您可以通过省略 b:inputText 中的 mask 属性来创建解决方法,并使用 JavaScript:

初始化掩码
Inputmask({ regex: "[0-9\u0600-\u06FF]*" }).mask("input[type=text]");

0-9是匹配数字,\u0600-\u06FF是匹配阿拉伯字符。
使用 .mask("..."),您可以 select 应用掩码的输入。

PrimeFaces

到目前为止 (6.2) PrimeFaces inputMask 不支持正则表达式。不过,您可以将 p:inputTextp:keyFilter 一起使用:

<p:inputText>
  <p:keyFilter regEx="/[0-9\u0600-\u06FF]/"/>
</p:inputText>

请注意 PrimeFaces 使用 JavaScript 表示法:/pattern/.

其他语言

您的问题是如何匹配掩码中的阿拉伯字符。当然,同样的解决方案可以应用于使用非西方拉丁字符的其他语言,例如:

  • 中文
  • 希伯来语
  • 印地语
  • 日语
  • 韩语(韩文)
  • 俄语(西里尔文)

对于每种语言/字符集,都是找到正确的正则表达式的问题。