我有一个简单的模式,我正在尝试进行查找和替换。它需要用被数字包围的句点替换所有短划线。
替换这些中的句号:
3-54
32-11
111-4523mhz
喜欢如此:
3.54
32.11
111.4523mhz
但是,我不想在这些内容中替换破折号:
Example-One
A-Test
我尝试过使用以下内容:
preg_replace('/[0-9](-)[0-9]/', '.', $string);
然而,这将取代整场比赛,而不仅仅是中场。你怎么只替换比赛的一部分?
答案 0 :(得分:10)
preg_replace('/([0-9])-([0-9])/', '$1.$2', $string);
应该做的伎俩:)
编辑:更多解释:
在正则表达式中使用(
和)
,即可创建一个组。该组可用于替换。 $1
被第一个匹配的组取代,$2
被第二个匹配的组替换,依此类推。
这意味着如果您(仅举例)将'$1.$2'
更改为'$2.$1'
,则操作将交换这两个数字。
在你的情况下,这不是有用的行为,但也许它可以帮助你更好地理解这个原则。
答案 1 :(得分:2)
根据您正在使用的正则表达式实现,您可以使用非捕获组:
preg_replace('/(?<=[0-9])-(?=[0-9])/', '.', $string);
答案 2 :(得分:0)
您可以使用反向引用来保留您要保留的匹配部分:
preg_replace('/([0-9])-([0-9])/', '$1.$2', $string);
答案 3 :(得分:-1)
以下是实现相同目标的几种方法。
function ValidateFileType(controlName) {
try {
var uploadControl = controlName;
var isCValidFile = false;
var validFileNames = ["120.jpg","150.jpg","180.jpg","210.jpg","240.jpg"]
for (var i = 0; i < uploadControl.files.length; i++) {
var file = uploadControl.files[i];
var fileName = file.name.split(/(\\|\/)/g).pop().toLowerCase();
if (validFileNames.indexOf(fileName) < 0) {
jAlert("Invalid file name, please select etc...", "Information");
}
else if (file.size > 15728640) {
jAlert("Please check file size should be less than 15 MB.", "Information");
}
else {
isCValidFile = true;
}
if(!isCValidFile)
uploadControl.value = '';
}
return isCValidFile;
} catch (e) {
uploadControl.value = '';
jAlert("Error occurred on validate file.", "Error");
return false;
}
}