我想要这样的字符串:
基本上是由字母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次或多次。要注意的是,哈克先设计了这个答案。我只是想解释一下你的一些错误
这应该是工作
/((?!'(à|è|ì|ò|ù)$)[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