簡體   English   中英

在RegEx中接受國際名稱字符

[英]Accept international name characters in RegEx

我一直在與RegEx掙扎,所以請原諒我,如果這看起來像是一個解決我的問題的可怕方法。

當用戶輸入名字和姓氏時,我開始只使用基本,檢查大小寫,空格,撇號和連字符

if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }

現在我意識到這不是最好的,因為人們可以擁有如下的東西:馬丁路德金博士(用逗號和全文)。 所以我認為通過改變它會使它稍微有效。

if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }

然后我在Facebook上看到了一個我知道的女孩名字,她把自己的名字寫成了Siân,這讓我想到了包含變音符號以及日語/中文/韓語/俄語字符的名字。 所以我開始搜索並通過在其中寫下每個字符來找到方法。

if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u", $first_name)) { // Error }

你可以想象,這是一個非常長的啰嗦,我很確定有一個更簡單的RegEx可以實現這一目標。 就像我說的那樣,我已經四處尋找,但這是我能做的最好的事情。

那么,檢查大小寫字符,逗號,句號,撇號,大肆,變音符號,拉丁語,日語/俄語等的好方法是什么?

您可以使用Unicode字符類。 \\pL涵蓋幾乎所有字母符號。
http://php.net/manual/en/regexp.reference.unicode.php

 if (!preg_match("/^[a-zA-Z\s,.'-\pL]+$/u", $name))

另請參見http://www.regular-expressions.info/unicode.html ,但要注意PHP / PCRE只能理解縮寫的類名。

\\pL已經包含了azAZ ,因此上面提到的模式"/^[a-zA-Z\\s,.'-\\pL]+$/u"可以簡化為

"/^[\\s,.'-\\pL]+$/"

也不需要修飾符u

通過允許其他類型的標點符號,可能會有一些放松的資格。

應該限制​​的一件事是至少需要一個字母。

if (!preg_match("/^[\\s,.'-]*\\p{L}[\\p{L}\\s,.'-]*$/u", $name))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM