0

我想要这种字符串:

基本上是一串可以(或不能)以 à 或 è 或 ì 或 ù 结尾的字母 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

4

3 回答 3

1

根据您的描述,我将制定正则表达式如下:

/^[a-zA-Z]+[àèìòù]?$/

但是,从您的问题来看,尚不清楚您的问题到底出在哪里。您的正则表达式看起来有点冗长,但并没有那么错误,它可以解释您的问题(至少对我来说不是)。

编辑:重新阅读您的问题后,我看到一件事:该变量$word可能包含 UTF-8 编码数据。如果是这种情况,您需要将u(PCRE_UTF8)修饰符添加到正则表达式:

/^[a-zA-Z]+[àèìòù]?$/u
                     ^
                     `--- UTF-8 modifier

反过来也是如此:如果您的应用程序还没有使用 UTF-8,但 PHP 文件是用 UTF-8 编码的,那么上面的正则表达式也是无效的。

所以检查字符串和你的 PHP 文件的字符编码,这是我可以假设这里可能出错的一件事。

于 2013-03-13T11:11:29.553 回答
0

好的,让我们回顾一下你的一些正则表达式,这样你就可以看到哪里出错了。

/^[a-zA-Z]+[a-zA-Z]

所以一个或多个 a-zA-Z,然后是 a-zA-Z。好吧,这真的很没有意义: /^[a-zA-Z]+就足够了。

^[a-zA-Z]+[àèìòù]?$/

So a-zA-Z one or more times, followed by one or more of your symbols. Well, that's awfully similar to your original regular expression, so let's cut away and put it back together.

/^[a-zA-Z]+[àèìòù]?$/

So we've got a-zA-Z one or more times, followed by the symbols, 0 or more times at the end of the string. Just to note, Hakre devised this answer first. I just wanted to explain some of your mistakes.

于 2013-03-13T11:17:22.627 回答
0

This should be work

/((?!\(à|è|ì|ò|ù)$)[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
于 2013-03-13T11:17:44.437 回答