[英]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
已經包含了az
和AZ
,因此上面提到的模式"/^[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.