如何测试输入字段是否包含外来字符?

时间:2010-03-23 11:34:43

标签: php javascript regex validation unicode

我在表单中有一个输入字段。推送提交后,我想验证以确保用户只输入非拉丁字符,所以任何外语字符,如中文和其他许多字符。或者至少测试以确保它不包含任何拉丁字符。

我可以使用正则表达式吗?对此最好的方法是什么?

我在javaScript和PHP中都在验证。我可以使用哪些解决方案在两种编程语言中检查输入字段中的外来字符?

3 个答案:

答案 0 :(得分:2)

在PHP中,您可以检查Unicode属性IsLatin。这可能与你想要的最接近。

因此,如果preg_match('/\p{Latin}/u', $subject)返回true,则$subject中至少有一个拉丁字符。另请参阅this reference

JavaScript不支持此功能;你必须手动构建有效的Unicode范围。

答案 1 :(得分:1)

在Javascript中,至少可以在字符范围表达式中使用十六进制代码:

var rlatins = /[\u0000-\u007f]/;

然后,您可以测试以查看字符串中是否有任何拉丁字符:

if (rlatins.test(someString)) {
  alert("ROMANI ITE DOMUM");
}

答案 2 :(得分:1)

您正在尝试检查所有字母是否 拉丁文,但您接受重音字母。

一个简单的解决方案是使用正则表达式验证字符串(如果您有验证插件,这很有用):

/^[^a-z]+$/i
  • ^...$ - 从头到尾匹配
  • ^[...] -
  • 的字符
  • a-z - A虽然Z,
  • + - 至少有一个字母
  • /i - 忽略大小写(也可以/^[^a-zA-Z]+$/

另一个选择就是寻找一封信:

/[a-z]/i

如果字符串包含字母,则此正则表达式将匹配,因此您可以取消验证它。

在JavaScript中,您可以使用if轻松检查:

var s = "שלום עולם";
if(s.match(/^[^a-z]+$/i){
}

if(!s.match(/[a-z]/i))

PHP具有与JavaScript不同的语法和更高的安全性,但正则表达式是相同的。