2013-02-17 17 views
0

我想檢查用戶輸入是拉丁文還是西里爾文。我想讓用戶輸入一個只有拉丁或西裏爾字母的文本。我如何允許一個並否認另一個?我不希望用戶混合拉丁文和西里爾文。它只是一個或另一個。我是新來的正則表達式,並不能找出一種方法來做到這一點。 這是我到目前爲止。PHP的正則表達式檢查字符串是拉丁文還是西里爾文

!preg_match("/^([a-zA-Z]+|[\p{Cyrillic}]+)$/u", $inputstr) 

另外,「/」在開頭和結尾處做什麼? 「/ u」是做什麼的? 任何幫助表示讚賞。

+0

我做了麻煩,不能找出一種方法來解決我的問題。如果你能幫到你。如果你不能留下無益的評論 – khuderm 2013-02-17 06:29:26

+0

至少關於斜線和'u'修飾符的問題(提示:Unicode以'u'開頭)應該很容易從文檔中得到答案。但更重要的問題是:什麼字符可能是「全拉丁」或「全西里爾」字符串?標點?空白?符號?哪個? – 2013-02-17 06:45:47

+0

謝謝蒂姆。拉丁文和西里爾文僅包含字母,不包含puncuation,空格或符號。 – khuderm 2013-02-17 06:48:11

回答

3

鏈接的文檔zerkms回答了您的一些問題。

首先,什麼是/在開始和結束?這是圍繞你的正則表達式的delimeter pattern

二,什麼是u?這是一個modifier將模式字符串視爲unicode。

如果只允許一個char類型,使用分組如下:/^(?:\p{Cyrillic}+|\p{Latin}+)$/u

這應該在相同的字符串匹配或者西里爾字符或拉丁字符,但不能同時使用。

(?:stuff)是一個分組subpattern匹配但不捕獲。

+0

是什麼?和:做?我會查看手冊,但不知道他們在做什麼,我只是浪費我的時間尋找它。並且非常感謝。完美的作品! – khuderm 2013-02-17 06:54:55

+0

如果我想添加空格和連字符,那麼正則表達式會是這樣嗎?/^(?:\ p {Cyrillic} - + | \ p {拉丁} - +)$/u – khuderm 2013-02-17 06:59:10

+1

然後你需要一個字符類。而不是'\ p {拉丁}'做'[\ p {拉丁} \ s-]',而另一個則是相同的。 – 2013-02-17 07:00:46

相關問題