簡體   English   中英

preg_match和我的字符串

[英]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.

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