2010-03-23 80 views
0

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

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

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

+1

你是什么意思的“非拉丁”?任何不在'latin-1'中的字符?或者除了无味的A-Z/a-z字符以外的任何东西?应该允许标点符号,还是仅允许实际的字母?它是否必须同时在PHP和JavaScript中工作,还是为其中之一提供了足够的解决方案? – 2010-03-23 11:51:23

+0

通过非拉丁语,我的意思是使用完全不同的字符,如亚洲字符的任何外语字符。这个领域是一个人的职业标题,所以我想像标点符号可能需要像John T. Smith,Ph.D.等案例。感谢您的询问。我甚至没有考虑过! – zeckdude 2010-03-23 12:00:56

+0

我不一定需要适用于两者的解决方案。只要PHP和JavaScript都能满足我的需求,我就会采用两种不同的解决方案。不能挑剔。 – zeckdude 2010-03-23 12:03:46

回答

1

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

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

然后,您可以测试一下,看看是否有这样的字符串中的任何拉丁字符:

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

这将触发除拉丁字母外的标点符号和其他字符。 – 2010-03-23 12:24:03

+0

是的,它在原始问题中意图不明确。我猜测检查/ [A-Za-z] /是如此明显,以至于它不可能是问题所在:-) – Pointy 2010-03-23 13:29:04

+0

您提出的建议非常有效,但只要我添加句号或空格或者与外来字符一样的字段中的任何内容,则它将被验证为拉丁文。我如何改变你的建议,以允许其他字符,但仍然不允许任何正常的字母?谢谢你的帮助! – zeckdude 2010-03-29 01:35:28

2

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

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

JavaScript不支持此操作;您必须手动构建有效的Unicode范围。

+0

我想要做的就是测试以确保字段中的字符是非拉丁字符。 – zeckdude 2010-03-23 11:56:15

+1

定义“非拉丁字符”。 – 2010-03-23 11:58:10

+0

请参阅我上面留下的评论。 – zeckdude 2010-03-23 12:01:34

1

您正试图检查所有字母是否为不是拉丁文,但您确实接受重音字母。

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

/^[^a-z]+$/i 
  • ^...$ - 比赛从开始到结束
  • ^[...] - 字符是
  • a-z - A到Z,
  • + - 至少有一个字母
  • /i - 忽略大小写(也可以做/^[^a-zA-Z]+$/

另一种选择就是寻找一个字母:

/[a-z]/i 

此正则表达式匹配,如果字符串conatins一封信,所以你可以不验证它。

在JavaScript中,你可以用if检查容易:

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

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

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

相关问题