2010-03-23 71 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中的不同的語法和更高的安全性,但正則表達式是相同的。

相關問題