I want to convert the user input to a list of postcodes, e.g.
- If the user types
SW[1-3]return a list ofSW1,SW2,SW3. - I also need it to work alphabetically, if the user inputs
LD1[A-D]return a list ofLD1A,LD1B,LD1C,LD1D. - If the user doesn't use square brackets and just does
LD1then it should just returnLD1in the list.
This is what I've tried so far but I can't get the validation to work and I'm not sure I have the best method for creating the list.
public function store(Request $request) {
$request->validate([
'postcode' => 'required|string|regex:/^[A-Z0-9][\[A-Z\-0-9\]]*$/u',
]);
$postcode_input = $request->postcode;
$postcode_list = [];
// check for []'s
$match = preg_match('/\[[^\]]*\]/', $postcode_input, $matches);
if($match) {
$letters = explode("[", $postcode_input)[0] ?? false;
$numbers = explode("-", str_replace( array('[',']') , '' , $matches )[0]) ?? false;
if($letters && $numbers[0] && $numbers[1]) {
foreach (range($numbers[0], $numbers[1]) as $number) {
$postcode_list[] = $letters . $number;
}
}
} else {
$postcode_list[] = $postcode_input;
}
if(count($postcode_list) > 0) {
foreach($postcode_list as $pc) {
$pc = preg_replace("/\s+/", "", $pc);
echo $pc . "<br>";
}
}
}