[英]preg_match and my string
我想要這種字符串:
基本上是由字母a-zA-Z組成的字符串,可以(或不能)以à或è或ì或ù結尾。
我這樣做:
preg_match('/^[a-zA-Z]+[a-zA-Z]+$|^[a-zA-Z]+[àèìòù]?$/', $word)
而且我仍然認為還可以,但是由於某種原因它無法完成工作!
編輯:有些意大利語姓氏可以以àèìòù結尾,但其他一些姓氏以字母結尾。 我想讓字符串的結尾可以以àèìòù或字母結尾。
這是完整的代碼
if ( preg_match('/^[a-zA-Z]+[àèìòù]?$/', $word) ) {
echo "0";
} else {
echo LASTNAME_ERROR;
}
但是當我執行它時,它給了我LASTNAME_ERROR
根據您的描述,我將正則表達式表達如下:
/^[a-zA-Z]+[àèìòù]?$/
但是,根據您的問題,您的問題到底在哪里還不清楚。 您的正則表達式看起來有點冗長,但沒有錯,它可以解釋您的問題(至少對我而言)。
編輯:重新閱讀您的問題后,我看到一件事:變量$word
可能包含UTF-8編碼的數據。 如果是這種情況,則需要在正則表達式中添加u
(PCRE_UTF8)修飾符 :
/^[a-zA-Z]+[àèìòù]?$/u
^
`--- UTF-8 modifier
反之亦然:如果您尚未在應用程序中使用UTF-8,但PHP文件以UTF-8編碼,則上述正則表達式也無效。
因此,請檢查字符串和PHP文件的字符編碼,這是我可以假定這里可能出錯的一件事。
好的,讓我們回顧一下您的正則表達式,以便您查看出錯的地方。
/^[a-zA-Z]+[a-zA-Z]
因此,一個或多個a-zA-Z,然后是a-zA-Z。 好吧,這實際上是毫無意義的: /^[a-zA-Z]+
就足夠了。
^[a-zA-Z]+[àèìòù]?$/
因此,一次或多次a-zA-Z,然后是一個或多個符號。 好吧,這與您的原始正則表達式非常相似,所以讓我們切掉並將其放回原處。
/^[a-zA-Z]+[àèìòù]?$/
因此,我們得到a-zA-Z一次或多次,然后在字符串的末尾加上符號0次或多次。 請注意,Hakre首先設計了這個答案。 我只是想解釋一下您的一些錯誤。
這應該是工作
/((?!\(à|è|ì|ò|ù)$)[a-zA-Z])+/
( # start a group for the purposes of repeating
(à|è|ì|ò|ù) # negative lookahead assertion for the pattern à|è|ì|ò|ù
[a-zA-Z] # your own pattern for matching a URL character
)+ # repeat the group
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.