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