字符串组件

什么是字符串?美国信息交换标准代码).

但是,其他语言需要数千个符号来显示其内容。他们需要复杂的编码标准,如Unicode像“角色”这样的概念也不再有意义。相反,你必须处理这些条款:

  • 代码点:它们是信息的原子单位。字符串是一系列代码点。每个代码点是一个数字,其含义由Unicode标准。例如,英文字母一个U + 0041代码点和日本人假名U + 306E.代码点。
  • Grapheme集群:它们是一个或多个代码点的序列,以单个图形单元显示。例如,西班牙字母n是包含两个代码点的图形群集:U + 006 en"拉丁语小写字母N ")+U + 0303“结合波浪号”).
  • 字节:它们是为字符串内容存储的实际信息。每个代码点可以根据使用的标准(UTF-8,UTF-16等)需要一个或多个字节的存储空间。

下面的图像显示了用英语(你好)及印地语(नमस्ते):

. . / _images / bytes-points-graphemes.png"类="align-center

使用裹()静态方法实例化多个字符串对象:

美元的内容Bytestring.::包装(['你好'“世界”]);// $ contents = bytestring []美元的内容UnicodeString::包装([“我”“❤️”S欧宝娱乐app下载地址ymfony的]);// $ contents = UnicodeString []//使用unwrap方法进行逆转换美元的内容UnicodeString::打开([UnicodeString'你好'),UnicodeString“世界”),]);// $contents = ['hello', 'world']

如果你要处理很多String对象,考虑使用快捷键函数使你的代码更简洁:

// B()函数创建字节字符串使用函数欧宝娱乐app下载地址Symfony \ b \组件\字符串//这两行是等价的$ fooBytestring.'你好');$ foob'你好');// u()函数创建Unicode字符串使用函数欧宝娱乐app下载地址Symfony \组件\ \ u字符串//这两行是等价的$ fooUnicodeString'你好');$ foou'你好');// s()函数创建字节字符串或Unicode字符串//取决于给定的内容使用函数欧宝娱乐app下载地址Symfony \组件\ \ s字符串//创建ByteString对象$ foo年代以\ xfe \ xff);//创建UnicodeString对象$ foo年代“अनुच्छेद”);

5.1版中的新增功能:年代()函数是在Symfony 5.1中引入的。欧宝娱乐app下载地址

还有一些专业的构造函数:

// ByteString可以创建一个给定长度的随机字符串$ fooBytestring.::fromRandom12.);//默认情况下,随机字符串使用A-Za-z0-9字符;你可以限制//第二个可选参数使用的字符$ fooBytestring.::fromRandom6“AEIOU0123456789”);$ fooBytestring.::fromRandom10.“qwertyuiop”);// CodePointString和UnicodeString可以从代码点创建字符串$ fooUnicodeString::从CodePoints.0x9280 x92e0 x9380 x94d0x9240 x947);//相当于:$ foo =新的单码('नमस्ते');

5.1版中的新增功能:第二个论证Bytestring :: fromrandom()是在Symfony 5.1中引入的。欧宝娱乐app下载地址

如果由于任何原因转换不可能,您将得到欧宝娱乐app下载地址Symfony \组件\ \例外\ InvalidArgumentException字符串

还有一个方法来获取存储在某个位置的字节:

/ /(“नमस्ते的字节数= (224,164,168,224,164,174,224,164,184,// 224,165,141,224,164,164,224,165,135])b'नमस्ते'->bytesAt0);/ / [224]u'नमस्ते'->bytesAt0);// [224,164,168]b'नमस्ते'->bytesAt1);/ / [164]u'नमस्ते'->bytesAt1);// [224, 164, 174]

改变案例的方法
//更改所有图形/代码指向小写u'foo bar'->较低的();//'foo bar'//在处理不同的语言时,大写/小写是不够的//有三种情况(lower, upper, title),有些字符没有大小写,//大小写是上下文敏感和区域敏感的,等等。//此方法返回一个字符串,以便在不敏感的比较中使用u'foo bar'->折叠();//'foo bar'u“死O \”布莱恩箍ße”->折叠();// "die o 'Brian strasse"//将所有图形/代码指向大写u“foo酒吧”->();//'foo bar'//将所有图形/码点更改为“标题案例”u“foo酒吧”->标题();/ / Foo酒吧的u“foo酒吧”->标题真正的);/ / Foo酒吧的//修改所有字母/代码指向驼峰u“Foo: bar baz。”->骆驼();/ /“fooBarBaz”//更改所有图形/代码点到snake_caseu“Foo: bar baz。”->();/ /“foo_bar_baz”//其他情况可以通过链接方法来实现。例如PascalCase:u“Foo: bar baz。”->骆驼()->标题();/ /“FooBarBaz”

默认情况下,所有字符串类的方法都区分大小写。属性可以执行不区分大小写的操作Ignorecase()方法:

u'abc'->indexOf'B');/ /空u'abc'->ignoreCase()->indexOf'B');/ / 1

附加和预先提交的方法
//在字符串的开头/结尾添加给定的内容(一个或多个字符串)u“世界”->Prepend.'你好');/ /“helloworld”u“世界”->Prepend.'你好''');/ /“hello world”u'你好'->附加“世界”);/ /“helloworld”u'你好'->附加''“世界”);/ /“hello world”//在字符串的开头添加(或删除)给定的内容//确保内容完全以该内容开始u“名字”->ensureStart'得到');/ /“getName”ugetName的->ensureStart'得到');/ /“getName”u“getgetName”->ensureStart'得到');/ /“getName”//这个方法是类似的,但工作在内容的结尾而不是开始u'用户'->ensureEnd“控制器”);//'usercontroller'u“用户”->ensureEnd“控制器”);//'usercontroller'u“UserControllerController”->ensureEnd“控制器”);//'usercontroller'//返回在给定字符串第一次出现之前/之后找到的内容u'你好,世界'->之前“世界”);/ / '你好'u'你好,世界'->之前“o”);// '地狱'u'你好,世界'->之前“o”真正的);// '你好'u'你好,世界'->'你好');// ' 世界'u'你好,世界'->“o”);// ' 世界'u'你好,世界'->“o”真正的);//'O World'//返回在给定字符串最后一次出现之前/之后找到的内容u'你好,世界'->beforeLast“o”);/ /“你好w”u'你好,世界'->beforeLast“o”真正的);/ /“你好我”u'你好,世界'->毕竟“o”);/ /“行”u'你好,世界'->毕竟“o”真正的);/ /“上”

填充和修剪方法
//通过添加给定的参数,使字符串与第一个参数一样长//字符串的开始,结束或两边u'lorem ipsum'->padBoth20.“- - -”);// '——Lorem Ipsum ----'u“回车键”->Padstart.20.“- - -”);// '-------- Lorem Ipsum'u“回车键”->padEnd20.“- - -”);// 'Lorem Ipsum --------'//重复给定的字符串作为参数传递的次数u“_”。->重复10.);// '_._._._._._._._._._.'//删除字符串中给定的字符(默认为空格)u'lorem ipsum'->修剪();/ /“回车键”u“回车键”->修剪“米”);// 'Lorem Ipsum 'u'lorem ipsum'->修剪“米”);/ /“Lorem Ipsu”u'lorem ipsum'->修剪艺术();// 'Lorem Ipsum 'u'lorem ipsum'->trimEnd();// ' Lorem Ipsum'

搜索和更换的方法
//检查字符串是否以给定的字符串开始/结束u'https://欧宝娱乐app下载地址www.oldmanjams.com'->startsWith“https”);/ /正确的u'报告-1234.pdf'->endsWithpdf格式的);/ /正确的//检查字符串的内容是否与给定的内容完全相同u'foo'->equalsTo'foo');/ /正确的//检查字符串内容是否匹配给定的正则表达式u'avatar-73647.png'->匹配' /阿凡达(\ d +) \ . png / ');//结果= ['avatar-73647.png','73647']//检查字符串是否包含其他给定的字符串u“五个母音字母->包含一份'一种');/ /正确的u“五个母音字母->包含一份(['ab'“efg”]);/ /错误u“五个母音字母->包含一份([“eio”'foo'“z”]);/ /正确的//查找给定字符串第一次出现的位置//第二个参数是搜索开始的位置,为负数//函数值的含义与PHP函数相同u“abcdeabcde”->indexOf'C');/ / 2u“abcdeabcde”->indexOf'C'2);/ / 2u“abcdeabcde”->indexOf'C'-4);/ / 7u“abcdeabcde”->indexOf“eab”);/ / 4u“abcdeabcde”->indexOf“k”);/ /空//查找上次出现给定字符串的位置//第二个参数是搜索开始的位置,为负数//函数值的含义与PHP函数相同u“abcdeabcde”->indexOfLast'C');/ / 7u“abcdeabcde”->indexOfLast'C'2);/ / 7u“abcdeabcde”->indexOfLast'C'-4);/ / 2u“abcdeabcde”->indexOfLast“eab”);/ / 4u“abcdeabcde”->indexOfLast“k”);/ /空//替换给定字符串的所有匹配项u“http://欧宝娱乐app下载地址www.oldmanjams.com”->取代'http://'“https://”);//'https://s欧宝娱乐app下载地址ymfony.com'//替换所有出现的正则表达式u“(+ 1)206-555-0100”->replaceMatches' / [^ A-Za-z0-9] + + / ''');//'1065550100'//你可以传递一个callable作为第二个参数来执行高级替换u'123'->replaceMatches' / \ d / '函数$匹配返回“(”$匹配0“]”});//结果='[1] [2] [3]'

5.1版中的新增功能:containsAny ()方法在Symfony 5.1中引入。欧宝娱乐app下载地址

连接、分割、截断和反向的方法
//使用字符串作为“胶水”来合并所有给定的字符串u”、“->加入(['foo'“酒吧”]);//'foo,bar'//使用给定的分隔符将字符串分割成几段u“template_name.html.twig”->分裂“。”);// ['template_name', 'html', 'twig']//你可以设置最大的块数作为第二个参数u“template_name.html.twig”->分裂“。”2);/ / [' template_name ', ' html.twig ']//返回一个在第一个参数中开始的子字符串,并且具有它们的长度//第二个可选参数(负数的含义与PHP函数中相同)uS欧宝娱乐app下载地址ymfony是伟大的->07);//'s欧宝娱乐app下载地址ymfony'uS欧宝娱乐app下载地址ymfony是伟大的->0-6);//'s欧宝娱乐app下载地址ymfony是'uS欧宝娱乐app下载地址ymfony是伟大的->11.);/ /“伟大的”uS欧宝娱乐app下载地址ymfony是伟大的->-5);/ /“伟大的”//将字符串缩小为作为参数给出的长度(如果是更长时间)u'lorem ipsum'->截短3.);/ /“卤”u'lorem ipsum'->截短80);/ /“回车键”//第二个参数是字符串被切割时添加的字符//(总长度包括此字符的长度))u'lorem ipsum'->截短8'...');//'lem我...'//如果第三个参数为false,则保留cut之前的最后一个单词//即使生成的字符串比期望的长度长u'lorem ipsum'->截短8'...');/ /“回车键”

5.1版中的新增功能:第三个论点截断()是在Symfony 5.1中引入的。欧宝娱乐app下载地址

//将字符串分割成给定长度的行u'lorem ipsum'->自动换行4);/ /“Lorem \ nIpsum”//默认为空白;通过TRUE无条件打破u'lorem ipsum'->自动换行4\ n真正的);//'lore \ nm \ nipsu \ nm'//用给定的内容替换字符串的一部分://第二个论点是替换开始的位置;//第三个参数是从字符串中删除的图形/代码点数u“0123456789”->拼接“xxx”);/ /“xxx”u“0123456789”->拼接“xxx”02);/ /“xxx23456789”u“0123456789”->拼接“xxx”06);/ /“xxx6789”u“0123456789”->拼接“xxx”6);//'012345xxx'//将字符串分割成长度作为参数u“0123456789”->3.);// ['012', '345', '678', '9']//反转字符串内容的顺序u“foo酒吧”->反向();/ /“rab力量”u“さよなら”->反向();//'らなよさ'

5.1版中的新增功能:反向()方法在Symfony 5.1中引入。欧宝娱乐app下载地址

ByteString添加的方法Bytestring.对象:

//如果字符串内容是有效的UTF-8内容,则返回TRUEb'lorem ipsum'->isutf8();/ /正确的b\ xc3 \ x28->isutf8();/ /错误

由CodePointString和UnicodeString添加的方法CodePointStringUnicodeString对象:

//将任何字符串音译为ASCII编码定义的拉丁字母//不要使用这个方法来构建一个重击器,因为这个组件已经提供了//一个强击手,这篇文章后面会解释)u'नमस्ते'->ASCII.();/ /“合十礼”u“さよなら”->ASCII.();/ /“再会”u“спасибо”->ASCII.();/ /“spasibo”//使用存储在给定位置的代码点或点返回数组// (code points of 'नमस्ते' graphemes = [2344,2350,2360,2340])u'नमस्ते'->codePointsAt0);// [2344]u'नमस्ते'->codePointsAt2);/ / [2360]

Unicode等价是Unicode标准的一种规范,即不同的代码点序列表示相同的字符。例如,瑞典字母一个可以是单个代码点(U + 00 e5"拉丁文小写字母A,上面有一圈")或由两个码点组成的序列(U + 0061"拉丁语小写字母A "+U + 030“上面结合环”).的normalize ()方法允许选择归一化模式:

//这些编码作为单个代码点的字母:u + 00e5u'一种'->正常化UnicodeString::NFC);u'一种'->正常化UnicodeString::NFKC);//这些将字母编码为两个代码点:U + 0061 + U + 030Au'一种'->正常化UnicodeString::NFD);u'一种'->正常化UnicodeString::NFKD);

重击者
使用欧宝娱乐app下载地址Symfony \组件\ \重击者\ AsciiSlugger字符串$ slugger.AsciiSlugger();$ slug.$ slugger.->sl“磨破ķšƥ高手~ ~ seť锡ğš~ ~”);// $slug = 'Workspace-settings'//你也可以传递一个带有额外字符替换的数组$ slugger.AsciiSlugger'en''en'=>'%'=>'百分'“€”=>'欧元']]);$ slug.$ slugger.->sl'10%或5€');// $slug = ' 10% -or-5欧元'//对于更动态的替换,传递一个PHP闭包而不是数组$ slugger.AsciiSlugger'en'函数$字符串美元的语言环境返回str_replace.“❤️”“爱”$字符串);});

5.1版中的新增功能:在Symfony 5.1中引入了定义附加替换的功能。欧宝娱乐app下载地址

5.2版中的新增功能:Symfony 5.2中引入了使用PHP闭包定义替换的特性。欧宝娱乐app下载地址

单词之间的分隔符是破折号(-),但你可以定义另一个分隔符作为第二个参数:

$ slug.$ slugger.->sl“磨破ķšƥ高手~ ~ seť锡ğš~ ~”' / ');// $ slug ='工作区/设置'

在应用另一个转换之前,SLUGGER将原始字符串翻译成拉丁文脚本。自动检测原始字符串的区域设置,但您可以显式定义它:

//这告诉击球手要把韩语翻译成英文$ slugger.AsciiSlugger“柯”);//您可以将语言环境覆盖为SLUG()的第三个可选参数$ slug.$ slugger.->sl'...'“- - -”“足”);

在Symf欧宝娱乐app下载地址ony应用程序中,您不需要自己创建强击器。多亏了服务自动定向的方法,通过键入提示服务构造函数参数来注入一个重击器欧宝娱乐app下载地址Symfony \组件\ \重击者\ SluggerInterface字符串.注入的强击器的区域设置与请求的区域设置相同:

使用欧宝娱乐app下载地址Symfony \组件\ \重击者\ SluggerInterface字符串MyService私人$ slugger.公共函数__constructslugger interface.$ slugger.$这一点->懒鬼$ slugger.公共函数someMethod()$ slug.$这一点->懒鬼->sl'...');

充气机

5.1版中的新增功能:在Symfony 5.1中引入了inflector特性。欧宝娱乐app下载地址

在某些情况下,例如代码生成和代码内省,您需要将单词从/转换为单数/复数。例如,要知道与加法器方法,则必须将复数(addStories ()方法)为单数(美元的故事属性)。

大多数人类语言都有简单的复数规则,但同时也定义了许多例外情况。例如,英语的一般规则是添加一个年代在(这个词的末尾->图书),但即使是常用词也有很多例外(女人->女性生活->生命欧宝app在哪里找->欧宝app在哪里找半径->半径, 等等。)

该组件提供了一个欧宝娱乐app下载地址Symfony \组件\ \弯曲物\ EnglishInflector字符串把英语单词从/转换成单数/复数

使用欧宝娱乐app下载地址Symfony \组件\ \弯曲物\ EnglishInflector字符串美元弯曲物EnglishInflector();美元的结果美元弯曲物->使显著“牙齿”);// ['牙']美元的结果美元弯曲物->使显著'radii');/ /(“半径”)美元的结果美元弯曲物->使显著“叶子”);// ['leaf', 'leave', 'leaf']美元的结果美元弯曲物->兼职'细菌');// ['细菌']美元的结果美元弯曲物->兼职'欧宝app在哪里找消息');// ['欧宝app在哪里找消息']美元的结果美元弯曲物->兼职“人”);/ /['人','人']

这两种方法返回的值总是一个数组,因为有时不可能确定给定单词的唯一单数/复数形式。

这个工作,包括代码示例,是根据知识共享BY-SA 3.0许可证。