我正在慢慢完善 PHP 中用于清理用户输入的标点修复功能。该函数目前在标点后添加空格,在标点前删除空格,并将每个句子的第一个单词大写。我看到一些人在寻找类似的功能,所以我很高兴分享我目前所拥有的。它非常接近我想要的位置,但是,当它在逗号后添加一个空格时,当逗号位于数字(例如 1,000)内时,应该避免这样做。任何人都可以建议修改我的代码以忽略数字内的逗号的最快方法吗?也许有办法缩短我所拥有的但仍然达到相同的结果?感谢您的宝贵时间...
function format_punc($string){
$punctuation = ',.;:';
$string = str_replace(' ?', '?', str_replace(' .', '.', str_replace(' ,', ',', preg_replace('/(['.$punctuation.'])[\s]*/', '\1 ', $string))));
$string = trim(preg_replace('/[[:space:]]+/', ' ', preg_replace('/([\.!\?]\s+|\A)(\w)/e', '"$1" . strtoupper("$2")', $string)));
if($string[strlen($string)-1]==','){
$string = substr($string, 0, -1).'.';
}
return $string;
}
最佳答案
这是我更新的 php 修复标点符号功能...它现在似乎工作正常。我确信有办法压缩它,但它可以对字符串执行以下操作......
减少重复的标点符号,例如 !!到 !
将多个空格缩减为单个空格
删除之前的任何空格? . ,
在 ; 之后添加空格:
在逗号后添加空格,但当它们是数字的一部分时不添加
在句点后添加空格,但当它们是数字或缩写的一部分时不添加
删除字符串开头和结尾的空格
首字母大写
如果最后一个字符是逗号,则将其更改为句号
function format_punc($string){
$punctuation = ';:';
$spaced_punc = array(' ?', ' .', ' ,');
$un_spaced_punc = array('?', '.', ',');
$string = preg_replace("/([.,!?;:])+/iS","$1",$string);
$string = preg_replace('/[[:space:]]+/', ' ', $string);
$string = str_replace($spaced_punc, $un_spaced_punc, $string);
$string = preg_replace('/(['.$punctuation.'])[\s]*/', '\1 ', $string);
$string = preg_replace('/(?<!\d),|,(?!\d{3})/', ', ', $string);
$string = preg_replace('/(\.)([[:alpha:]]{2,})/', '$1 $2', $string);
$string = trim($string);
$string = preg_replace('/([\.!\?]\s+|\A)(\w)/e', '"$1" . strtoupper("$2")', $string);
if($string[strlen($string)-1]==','){
$string = substr($string, 0, -1).'.';
}
return $string;
}
如果您花时间压缩这段代码并创建仍然返回相同结果的东西,请分享!谢谢你,享受吧!
关于php - 在 php 中添加/修复标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125209/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
当谈到运行时自省(introspection)和动态代码生成时,我认为ruby没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资
我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
我正在开发一个创建网络博客的RubyonRails项目。我希望将一个名为featured的boolean数据库字段添加到Post模型中。该字段应该可以通过我添加的事件管理界面进行编辑。我使用了以下代码,但我什至没有在网站上显示另一列。$railsgeneratemigrationaddFeaturedfeatured:boolean$rakedb:migrate我是RubyonRails的新手,非常感谢任何帮助。我的index.html.erb文件中的相关代码(views):FeaturedPost架构.rb:ActiveRecord::Schema.define(:version=>
这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac