繁体   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