我想要这种字符串:
基本上是一串字母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
答案 0 :(得分:1)
根据你的描述,我会按照以下方式制定正则表达式:
/^[a-zA-Z]+[àèìòù]?$/
然而,根据您的问题,目前尚不清楚您的问题究竟在哪里。你的正则表达式看起来有点冗长,但没有错,它会解释你的问题(至少不是我)。
编辑 重新阅读问题后,我看到一件事:变量$word
可能包含UTF-8编码数据。如果是这种情况,您需要将u
(PCRE_UTF8) modifier添加到正则表达式:
/^[a-zA-Z]+[àèìòù]?$/u
^
`--- UTF-8 modifier
反过来也是如此:如果您的应用程序尚未使用UTF-8但PHP文件以UTF-8编码,则上述正则表达式也无效。
所以检查字符串和PHP文件的字符编码,这是我可以假设在这里可能出错的一件事。
答案 1 :(得分:0)
好的,让我们回顾一下你的一些正则表达式,这样你就可以看到你出错了。
/^[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首先设计了这个答案。我只想解释你的一些错误。
答案 2 :(得分: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